NPM adhering to both ingress and egress rules (#765)

This change will help evaluate both INGRESS and EGRESS rules before accepting/taking a decision on a packet. NPM will now MARK a packet for ingress/egress and RETURN the MARK'ed packet. Then packet will be accepted in the main chain after all the ingress and egress rules are processed.

* first pass trying to return instead of accept

* Adding initial marking capability

* Adding accept on ingress and egress marks

* Correcting an ingress marker

* Correcting unit test cases to show the appropriate markers

* Correcting a comment

* Addressing comments
This commit is contained in:
Vamsi Kalapala 2021-01-25 12:33:26 -08:00 коммит произвёл GitHub
Родитель 39c9ad3a72
Коммит a1f13a8eea
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
4 изменённых файлов: 446 добавлений и 63 удалений

Просмотреть файл

@ -4,6 +4,7 @@
package iptm
import (
"fmt"
"os"
"os/exec"
"strconv"
@ -114,11 +115,65 @@ func (iptMgr *IptablesManager) InitNpmChains() error {
}
}
// Insert a RETURN on MARK rule for INGRESS in in AZURE-NPM-INGRESS-PORT chain
entry.Chain = util.IptablesAzureIngressPortChain
entry.Specs = []string{
util.IptablesJumpFlag,
util.IptablesReturn,
util.IptablesModuleFlag,
util.IptablesMarkVerb,
util.IptablesMarkFlag,
util.IptablesAzureIngressMarkHex,
util.IptablesModuleFlag,
util.IptablesCommentModuleFlag,
util.IptablesCommentFlag,
fmt.Sprintf("RETURN-on-INGRESS-mark-%s", util.IptablesAzureIngressMarkHex),
}
exists, err = iptMgr.Exists(entry)
if err != nil {
return err
}
if !exists {
iptMgr.OperationFlag = util.IptablesInsertionFlag
if _, err := iptMgr.Run(entry); err != nil {
metrics.SendErrorLogAndMetric(util.IptmID, "Error: failed to add default RETURN on INGRESS mark in AZURE-NPM-INGRESS-PORT chain.")
return err
}
}
// Create AZURE-NPM-INGRESS-FROM chain.
if err = iptMgr.AddChain(util.IptablesAzureIngressFromChain); err != nil {
return err
}
// Insert a RETURN on MARK rule for INGRESS in in AZURE-NPM-INGRESS-FROM chain
entry.Chain = util.IptablesAzureIngressFromChain
entry.Specs = []string{
util.IptablesJumpFlag,
util.IptablesReturn,
util.IptablesModuleFlag,
util.IptablesMarkVerb,
util.IptablesMarkFlag,
util.IptablesAzureIngressMarkHex,
util.IptablesModuleFlag,
util.IptablesCommentModuleFlag,
util.IptablesCommentFlag,
fmt.Sprintf("RETURN-on-INGRESS-mark-%s", util.IptablesAzureIngressMarkHex),
}
exists, err = iptMgr.Exists(entry)
if err != nil {
return err
}
if !exists {
iptMgr.OperationFlag = util.IptablesInsertionFlag
if _, err := iptMgr.Run(entry); err != nil {
metrics.SendErrorLogAndMetric(util.IptmID, "Error: failed to add default RETURN on INGRESS mark in AZURE-NPM-INGRESS-FROM chain.")
return err
}
}
// Create AZURE-NPM-EGRESS-PORT chain.
if err := iptMgr.AddChain(util.IptablesAzureEgressPortChain); err != nil {
return err
@ -135,7 +190,61 @@ func (iptMgr *IptablesManager) InitNpmChains() error {
if !exists {
iptMgr.OperationFlag = util.IptablesAppendFlag
if _, err := iptMgr.Run(entry); err != nil {
metrics.SendErrorLogAndMetric(util.IptmID, "Error: failed to add AZURE-NPM-INGRESS-PORT chain to AZURE-NPM chain.")
metrics.SendErrorLogAndMetric(util.IptmID, "Error: failed to add AZURE-NPM-EGRESS-PORT chain to AZURE-NPM chain.")
return err
}
}
// Insert a RETURN on MARK rule for EGRESS in AZURE-NPM-EGRESS-PORT
entry.Chain = util.IptablesAzureEgressPortChain
entry.Specs = []string{
util.IptablesJumpFlag,
util.IptablesReturn,
util.IptablesModuleFlag,
util.IptablesMarkVerb,
util.IptablesMarkFlag,
util.IptablesAzureEgressMarkHex,
util.IptablesModuleFlag,
util.IptablesCommentModuleFlag,
util.IptablesCommentFlag,
fmt.Sprintf("RETURN-on-EGRESS-mark-%s", util.IptablesAzureEgressMarkHex),
}
exists, err = iptMgr.Exists(entry)
if err != nil {
return err
}
if !exists {
iptMgr.OperationFlag = util.IptablesInsertionFlag
if _, err := iptMgr.Run(entry); err != nil {
metrics.SendErrorLogAndMetric(util.IptmID, "Error: failed to add default RETURN on EGRESS mark in AZURE-NPM-EGRESS-PORT chain.")
return err
}
}
// Insert a RETURN on MARK rule for EGRESS + INGRESS in AZURE-NPM-EGRESS-PORT
entry.Chain = util.IptablesAzureEgressPortChain
entry.Specs = []string{
util.IptablesJumpFlag,
util.IptablesReturn,
util.IptablesModuleFlag,
util.IptablesMarkVerb,
util.IptablesMarkFlag,
util.IptablesAzureAcceptMarkHex,
util.IptablesModuleFlag,
util.IptablesCommentModuleFlag,
util.IptablesCommentFlag,
fmt.Sprintf("RETURN-on-EGRESS-and-INGRESS-mark-%s", util.IptablesAzureAcceptMarkHex),
}
exists, err = iptMgr.Exists(entry)
if err != nil {
return err
}
if !exists {
iptMgr.OperationFlag = util.IptablesInsertionFlag
if _, err := iptMgr.Run(entry); err != nil {
metrics.SendErrorLogAndMetric(util.IptmID, "Error: failed to add default RETURN on EGRESS and INGRESS mark in AZURE-NPM-EGRESS-PORT chain.")
return err
}
}
@ -150,6 +259,142 @@ func (iptMgr *IptablesManager) InitNpmChains() error {
return err
}
// Insert a RETURN on MARK rule for EGRESS in AZURE-NPM-EGRESS-TO
entry.Chain = util.IptablesAzureEgressToChain
entry.Specs = []string{
util.IptablesJumpFlag,
util.IptablesReturn,
util.IptablesModuleFlag,
util.IptablesMarkVerb,
util.IptablesMarkFlag,
util.IptablesAzureEgressMarkHex,
util.IptablesModuleFlag,
util.IptablesCommentModuleFlag,
util.IptablesCommentFlag,
fmt.Sprintf("RETURN-on-EGRESS-mark-%s", util.IptablesAzureEgressMarkHex),
}
exists, err = iptMgr.Exists(entry)
if err != nil {
return err
}
if !exists {
iptMgr.OperationFlag = util.IptablesInsertionFlag
if _, err := iptMgr.Run(entry); err != nil {
metrics.SendErrorLogAndMetric(util.IptmID, "Error: failed to add default RETURN on EGRESS mark in AZURE-NPM-EGRESS-TO chain.")
return err
}
}
// Insert a RETURN on MARK rule for EGRESS + INGRESS in AZURE-NPM-EGRESS-TO
entry.Chain = util.IptablesAzureEgressToChain
entry.Specs = []string{
util.IptablesJumpFlag,
util.IptablesReturn,
util.IptablesModuleFlag,
util.IptablesMarkVerb,
util.IptablesMarkFlag,
util.IptablesAzureAcceptMarkHex,
util.IptablesModuleFlag,
util.IptablesCommentModuleFlag,
util.IptablesCommentFlag,
fmt.Sprintf("RETURN-on-EGRESS-and-INGRESS-mark-%s", util.IptablesAzureAcceptMarkHex),
}
exists, err = iptMgr.Exists(entry)
if err != nil {
return err
}
if !exists {
iptMgr.OperationFlag = util.IptablesInsertionFlag
if _, err := iptMgr.Run(entry); err != nil {
metrics.SendErrorLogAndMetric(util.IptmID, "Error: failed to add default RETURN on EGRESS and INGRESS mark in AZURE-NPM-EGRESS-TO chain.")
return err
}
}
// TODO move this in to a function for readability
// Insert a ACCEPT rule for INGRESS-and-EGRESS marked packets
entry.Chain = util.IptablesAzureChain
entry.Specs = []string{
util.IptablesJumpFlag,
util.IptablesAccept,
util.IptablesModuleFlag,
util.IptablesMarkVerb,
util.IptablesMarkFlag,
util.IptablesAzureAcceptMarkHex,
util.IptablesModuleFlag,
util.IptablesCommentModuleFlag,
util.IptablesCommentFlag,
fmt.Sprintf("ACCEPT-on-INGRESS-and-EGRESS-mark-%s", util.IptablesAzureAcceptMarkHex),
}
exists, err = iptMgr.Exists(entry)
if err != nil {
return err
}
if !exists {
iptMgr.OperationFlag = util.IptablesAppendFlag
if _, err := iptMgr.Run(entry); err != nil {
metrics.SendErrorLogAndMetric(util.IptmID, "Error: failed to add marked ACCEPT rule to AZURE-NPM chain.")
return err
}
}
// Insert a ACCEPT rule for INGRESS marked packets
entry.Chain = util.IptablesAzureChain
entry.Specs = []string{
util.IptablesJumpFlag,
util.IptablesAccept,
util.IptablesModuleFlag,
util.IptablesMarkVerb,
util.IptablesMarkFlag,
util.IptablesAzureIngressMarkHex,
util.IptablesModuleFlag,
util.IptablesCommentModuleFlag,
util.IptablesCommentFlag,
fmt.Sprintf("ACCEPT-on-INGRESS-mark-%s", util.IptablesAzureIngressMarkHex),
}
exists, err = iptMgr.Exists(entry)
if err != nil {
return err
}
if !exists {
iptMgr.OperationFlag = util.IptablesAppendFlag
if _, err := iptMgr.Run(entry); err != nil {
metrics.SendErrorLogAndMetric(util.IptmID, "Error: failed to add marked ACCEPT rule for INGRESS mark to AZURE-NPM chain.")
return err
}
}
// Insert a ACCEPT rule for EGRESS marked packets
entry.Chain = util.IptablesAzureChain
entry.Specs = []string{
util.IptablesJumpFlag,
util.IptablesAccept,
util.IptablesModuleFlag,
util.IptablesMarkVerb,
util.IptablesMarkFlag,
util.IptablesAzureEgressMarkHex,
util.IptablesModuleFlag,
util.IptablesCommentModuleFlag,
util.IptablesCommentFlag,
fmt.Sprintf("ACCEPT-on-EGRESS-mark-%s", util.IptablesAzureEgressMarkHex),
}
exists, err = iptMgr.Exists(entry)
if err != nil {
return err
}
if !exists {
iptMgr.OperationFlag = util.IptablesAppendFlag
if _, err := iptMgr.Run(entry); err != nil {
metrics.SendErrorLogAndMetric(util.IptmID, "Error: failed to add marked ACCEPT rule for EGRESS mark to AZURE-NPM chain.")
return err
}
}
// Append AZURE-NPM-TARGET-SETS chain to AZURE-NPM chain.
entry.Chain = util.IptablesAzureChain
entry.Specs = []string{util.IptablesJumpFlag, util.IptablesAzureTargetSetsChain}

Просмотреть файл

@ -224,7 +224,9 @@ func translateIngress(ns string, policyName string, targetSelector metav1.LabelS
entry.Specs = append(
entry.Specs,
util.IptablesJumpFlag,
util.IptablesAccept,
util.IptablesMark,
util.IptablesSetMarkFlag,
util.IptablesAzureIngressMarkHex,
util.IptablesModuleFlag,
util.IptablesCommentModuleFlag,
util.IptablesCommentFlag,
@ -256,7 +258,9 @@ func translateIngress(ns string, policyName string, targetSelector metav1.LabelS
util.GetHashedName(portName),
util.IptablesDstFlag+","+util.IptablesDstFlag,
util.IptablesJumpFlag,
util.IptablesAccept,
util.IptablesMark,
util.IptablesSetMarkFlag,
util.IptablesAzureIngressMarkHex,
util.IptablesModuleFlag,
util.IptablesCommentModuleFlag,
util.IptablesCommentFlag,
@ -274,7 +278,9 @@ func translateIngress(ns string, policyName string, targetSelector metav1.LabelS
entry.Specs = append(
entry.Specs,
util.IptablesJumpFlag,
util.IptablesAccept,
util.IptablesMark,
util.IptablesSetMarkFlag,
util.IptablesAzureIngressMarkHex,
util.IptablesModuleFlag,
util.IptablesCommentModuleFlag,
util.IptablesCommentFlag,
@ -333,7 +339,9 @@ func translateIngress(ns string, policyName string, targetSelector metav1.LabelS
util.GetHashedName(portName),
util.IptablesDstFlag+","+util.IptablesDstFlag,
util.IptablesJumpFlag,
util.IptablesAccept,
util.IptablesMark,
util.IptablesSetMarkFlag,
util.IptablesAzureIngressMarkHex,
util.IptablesModuleFlag,
util.IptablesCommentModuleFlag,
util.IptablesCommentFlag,
@ -362,7 +370,9 @@ func translateIngress(ns string, policyName string, targetSelector metav1.LabelS
entry.Specs = append(
entry.Specs,
util.IptablesJumpFlag,
util.IptablesAccept,
util.IptablesMark,
util.IptablesSetMarkFlag,
util.IptablesAzureIngressMarkHex,
util.IptablesModuleFlag,
util.IptablesCommentModuleFlag,
util.IptablesCommentFlag,
@ -388,7 +398,9 @@ func translateIngress(ns string, policyName string, targetSelector metav1.LabelS
util.GetHashedName(cidrIpsetName),
util.IptablesSrcFlag,
util.IptablesJumpFlag,
util.IptablesAccept,
util.IptablesMark,
util.IptablesSetMarkFlag,
util.IptablesAzureIngressMarkHex,
util.IptablesModuleFlag,
util.IptablesCommentModuleFlag,
util.IptablesCommentFlag,
@ -448,7 +460,9 @@ func translateIngress(ns string, policyName string, targetSelector metav1.LabelS
util.GetHashedName(portName),
util.IptablesDstFlag+","+util.IptablesDstFlag,
util.IptablesJumpFlag,
util.IptablesAccept,
util.IptablesMark,
util.IptablesSetMarkFlag,
util.IptablesAzureIngressMarkHex,
util.IptablesModuleFlag,
util.IptablesCommentModuleFlag,
util.IptablesCommentFlag,
@ -473,7 +487,9 @@ func translateIngress(ns string, policyName string, targetSelector metav1.LabelS
entry.Specs = append(
entry.Specs,
util.IptablesJumpFlag,
util.IptablesAccept,
util.IptablesMark,
util.IptablesSetMarkFlag,
util.IptablesAzureIngressMarkHex,
util.IptablesModuleFlag,
util.IptablesCommentModuleFlag,
util.IptablesCommentFlag,
@ -498,7 +514,9 @@ func translateIngress(ns string, policyName string, targetSelector metav1.LabelS
entry.Specs = append(
entry.Specs,
util.IptablesJumpFlag,
util.IptablesAccept,
util.IptablesMark,
util.IptablesSetMarkFlag,
util.IptablesAzureIngressMarkHex,
util.IptablesModuleFlag,
util.IptablesCommentModuleFlag,
util.IptablesCommentFlag,
@ -545,7 +563,9 @@ func translateIngress(ns string, policyName string, targetSelector metav1.LabelS
util.GetHashedName(portName),
util.IptablesDstFlag+","+util.IptablesDstFlag,
util.IptablesJumpFlag,
util.IptablesAccept,
util.IptablesMark,
util.IptablesSetMarkFlag,
util.IptablesAzureIngressMarkHex,
util.IptablesModuleFlag,
util.IptablesCommentModuleFlag,
util.IptablesCommentFlag,
@ -570,7 +590,9 @@ func translateIngress(ns string, policyName string, targetSelector metav1.LabelS
entry.Specs = append(
entry.Specs,
util.IptablesJumpFlag,
util.IptablesAccept,
util.IptablesMark,
util.IptablesSetMarkFlag,
util.IptablesAzureIngressMarkHex,
util.IptablesModuleFlag,
util.IptablesCommentModuleFlag,
util.IptablesCommentFlag,
@ -595,7 +617,9 @@ func translateIngress(ns string, policyName string, targetSelector metav1.LabelS
entry.Specs = append(
entry.Specs,
util.IptablesJumpFlag,
util.IptablesAccept,
util.IptablesMark,
util.IptablesSetMarkFlag,
util.IptablesAzureIngressMarkHex,
util.IptablesModuleFlag,
util.IptablesCommentModuleFlag,
util.IptablesCommentFlag,
@ -659,7 +683,9 @@ func translateIngress(ns string, policyName string, targetSelector metav1.LabelS
util.GetHashedName(portName),
util.IptablesDstFlag+","+util.IptablesDstFlag,
util.IptablesJumpFlag,
util.IptablesAccept,
util.IptablesMark,
util.IptablesSetMarkFlag,
util.IptablesAzureIngressMarkHex,
util.IptablesModuleFlag,
util.IptablesCommentModuleFlag,
util.IptablesCommentFlag,
@ -689,7 +715,9 @@ func translateIngress(ns string, policyName string, targetSelector metav1.LabelS
entry.Specs = append(
entry.Specs,
util.IptablesJumpFlag,
util.IptablesAccept,
util.IptablesMark,
util.IptablesSetMarkFlag,
util.IptablesAzureIngressMarkHex,
util.IptablesModuleFlag,
util.IptablesCommentModuleFlag,
util.IptablesCommentFlag,
@ -719,7 +747,9 @@ func translateIngress(ns string, policyName string, targetSelector metav1.LabelS
entry.Specs = append(
entry.Specs,
util.IptablesJumpFlag,
util.IptablesAccept,
util.IptablesMark,
util.IptablesSetMarkFlag,
util.IptablesAzureIngressMarkHex,
util.IptablesModuleFlag,
util.IptablesCommentModuleFlag,
util.IptablesCommentFlag,
@ -740,7 +770,9 @@ func translateIngress(ns string, policyName string, targetSelector metav1.LabelS
entry.Specs = append(
entry.Specs,
util.IptablesJumpFlag,
util.IptablesAccept,
util.IptablesMark,
util.IptablesSetMarkFlag,
util.IptablesAzureIngressMarkHex,
util.IptablesModuleFlag,
util.IptablesCommentModuleFlag,
util.IptablesCommentFlag,
@ -877,7 +909,9 @@ func translateEgress(ns string, policyName string, targetSelector metav1.LabelSe
util.GetHashedName(util.KubeAllNamespacesFlag),
util.IptablesDstFlag,
util.IptablesJumpFlag,
util.IptablesAccept,
util.IptablesMark,
util.IptablesSetMarkFlag,
util.IptablesAzureEgressXMarkHex,
util.IptablesModuleFlag,
util.IptablesCommentModuleFlag,
util.IptablesCommentFlag,
@ -909,7 +943,9 @@ func translateEgress(ns string, policyName string, targetSelector metav1.LabelSe
util.GetHashedName(portName),
util.IptablesSrcFlag+","+util.IptablesDstFlag,
util.IptablesJumpFlag,
util.IptablesAccept,
util.IptablesMark,
util.IptablesSetMarkFlag,
util.IptablesAzureEgressXMarkHex,
util.IptablesModuleFlag,
util.IptablesCommentModuleFlag,
util.IptablesCommentFlag,
@ -927,7 +963,9 @@ func translateEgress(ns string, policyName string, targetSelector metav1.LabelSe
entry.Specs = append(
entry.Specs,
util.IptablesJumpFlag,
util.IptablesAccept,
util.IptablesMark,
util.IptablesSetMarkFlag,
util.IptablesAzureEgressXMarkHex,
util.IptablesModuleFlag,
util.IptablesCommentModuleFlag,
util.IptablesCommentFlag,
@ -986,7 +1024,9 @@ func translateEgress(ns string, policyName string, targetSelector metav1.LabelSe
util.GetHashedName(portName),
util.IptablesSrcFlag+","+util.IptablesDstFlag,
util.IptablesJumpFlag,
util.IptablesAccept,
util.IptablesMark,
util.IptablesSetMarkFlag,
util.IptablesAzureEgressXMarkHex,
util.IptablesModuleFlag,
util.IptablesCommentModuleFlag,
util.IptablesCommentFlag,
@ -1015,7 +1055,9 @@ func translateEgress(ns string, policyName string, targetSelector metav1.LabelSe
entry.Specs = append(
entry.Specs,
util.IptablesJumpFlag,
util.IptablesAccept,
util.IptablesMark,
util.IptablesSetMarkFlag,
util.IptablesAzureEgressXMarkHex,
util.IptablesModuleFlag,
util.IptablesCommentModuleFlag,
util.IptablesCommentFlag,
@ -1047,7 +1089,9 @@ func translateEgress(ns string, policyName string, targetSelector metav1.LabelSe
entry.Specs = append(
entry.Specs,
util.IptablesJumpFlag,
util.IptablesAccept,
util.IptablesMark,
util.IptablesSetMarkFlag,
util.IptablesAzureEgressXMarkHex,
util.IptablesModuleFlag,
util.IptablesCommentModuleFlag,
util.IptablesCommentFlag,
@ -1107,7 +1151,9 @@ func translateEgress(ns string, policyName string, targetSelector metav1.LabelSe
util.GetHashedName(portName),
util.IptablesSrcFlag+","+util.IptablesDstFlag,
util.IptablesJumpFlag,
util.IptablesAccept,
util.IptablesMark,
util.IptablesSetMarkFlag,
util.IptablesAzureEgressXMarkHex,
util.IptablesModuleFlag,
util.IptablesCommentModuleFlag,
util.IptablesCommentFlag,
@ -1132,7 +1178,9 @@ func translateEgress(ns string, policyName string, targetSelector metav1.LabelSe
entry.Specs = append(
entry.Specs,
util.IptablesJumpFlag,
util.IptablesAccept,
util.IptablesMark,
util.IptablesSetMarkFlag,
util.IptablesAzureEgressXMarkHex,
util.IptablesModuleFlag,
util.IptablesCommentModuleFlag,
util.IptablesCommentFlag,
@ -1157,7 +1205,9 @@ func translateEgress(ns string, policyName string, targetSelector metav1.LabelSe
entry.Specs = append(
entry.Specs,
util.IptablesJumpFlag,
util.IptablesAccept,
util.IptablesMark,
util.IptablesSetMarkFlag,
util.IptablesAzureEgressXMarkHex,
util.IptablesModuleFlag,
util.IptablesCommentModuleFlag,
util.IptablesCommentFlag,
@ -1204,7 +1254,9 @@ func translateEgress(ns string, policyName string, targetSelector metav1.LabelSe
util.GetHashedName(portName),
util.IptablesSrcFlag+","+util.IptablesDstFlag,
util.IptablesJumpFlag,
util.IptablesAccept,
util.IptablesMark,
util.IptablesSetMarkFlag,
util.IptablesAzureEgressXMarkHex,
util.IptablesModuleFlag,
util.IptablesCommentModuleFlag,
util.IptablesCommentFlag,
@ -1229,7 +1281,9 @@ func translateEgress(ns string, policyName string, targetSelector metav1.LabelSe
entry.Specs = append(
entry.Specs,
util.IptablesJumpFlag,
util.IptablesAccept,
util.IptablesMark,
util.IptablesSetMarkFlag,
util.IptablesAzureEgressXMarkHex,
util.IptablesModuleFlag,
util.IptablesCommentModuleFlag,
util.IptablesCommentFlag,
@ -1254,7 +1308,9 @@ func translateEgress(ns string, policyName string, targetSelector metav1.LabelSe
entry.Specs = append(
entry.Specs,
util.IptablesJumpFlag,
util.IptablesAccept,
util.IptablesMark,
util.IptablesSetMarkFlag,
util.IptablesAzureEgressXMarkHex,
util.IptablesModuleFlag,
util.IptablesCommentModuleFlag,
util.IptablesCommentFlag,
@ -1318,7 +1374,9 @@ func translateEgress(ns string, policyName string, targetSelector metav1.LabelSe
util.GetHashedName(portName),
util.IptablesSrcFlag+","+util.IptablesDstFlag,
util.IptablesJumpFlag,
util.IptablesAccept,
util.IptablesMark,
util.IptablesSetMarkFlag,
util.IptablesAzureEgressXMarkHex,
util.IptablesModuleFlag,
util.IptablesCommentModuleFlag,
util.IptablesCommentFlag,
@ -1348,7 +1406,9 @@ func translateEgress(ns string, policyName string, targetSelector metav1.LabelSe
entry.Specs = append(
entry.Specs,
util.IptablesJumpFlag,
util.IptablesAccept,
util.IptablesMark,
util.IptablesSetMarkFlag,
util.IptablesAzureEgressXMarkHex,
util.IptablesModuleFlag,
util.IptablesCommentModuleFlag,
util.IptablesCommentFlag,
@ -1378,7 +1438,9 @@ func translateEgress(ns string, policyName string, targetSelector metav1.LabelSe
entry.Specs = append(
entry.Specs,
util.IptablesJumpFlag,
util.IptablesAccept,
util.IptablesMark,
util.IptablesSetMarkFlag,
util.IptablesAzureEgressXMarkHex,
util.IptablesModuleFlag,
util.IptablesCommentModuleFlag,
util.IptablesCommentFlag,
@ -1399,7 +1461,9 @@ func translateEgress(ns string, policyName string, targetSelector metav1.LabelSe
entry.Specs = append(
entry.Specs,
util.IptablesJumpFlag,
util.IptablesAccept,
util.IptablesMark,
util.IptablesSetMarkFlag,
util.IptablesAzureEgressXMarkHex,
util.IptablesModuleFlag,
util.IptablesCommentModuleFlag,
util.IptablesCommentFlag,

Просмотреть файл

@ -710,7 +710,9 @@ func TestTranslateIngress(t *testing.T) {
util.IptablesDstPortFlag,
"6783",
util.IptablesJumpFlag,
util.IptablesAccept,
util.IptablesMark,
util.IptablesSetMarkFlag,
util.IptablesAzureIngressMarkHex,
util.IptablesModuleFlag,
util.IptablesCommentModuleFlag,
util.IptablesCommentFlag,
@ -751,7 +753,9 @@ func TestTranslateIngress(t *testing.T) {
util.IptablesDstPortFlag,
"6783",
util.IptablesJumpFlag,
util.IptablesAccept,
util.IptablesMark,
util.IptablesSetMarkFlag,
util.IptablesAzureIngressMarkHex,
util.IptablesModuleFlag,
util.IptablesCommentModuleFlag,
util.IptablesCommentFlag,
@ -803,7 +807,9 @@ func TestTranslateIngress(t *testing.T) {
util.IptablesDstPortFlag,
"6783",
util.IptablesJumpFlag,
util.IptablesAccept,
util.IptablesMark,
util.IptablesSetMarkFlag,
util.IptablesAzureIngressMarkHex,
util.IptablesModuleFlag,
util.IptablesCommentModuleFlag,
util.IptablesCommentFlag,
@ -1015,7 +1021,9 @@ func TestTranslateEgress(t *testing.T) {
util.GetHashedName("testNotIn:frontend"),
util.IptablesSrcFlag,
util.IptablesJumpFlag,
util.IptablesAccept,
util.IptablesMark,
util.IptablesSetMarkFlag,
util.IptablesAzureEgressXMarkHex,
util.IptablesModuleFlag,
util.IptablesCommentModuleFlag,
util.IptablesCommentFlag,
@ -1056,7 +1064,9 @@ func TestTranslateEgress(t *testing.T) {
util.GetHashedName("testNotIn:frontend"),
util.IptablesSrcFlag,
util.IptablesJumpFlag,
util.IptablesAccept,
util.IptablesMark,
util.IptablesSetMarkFlag,
util.IptablesAzureEgressXMarkHex,
util.IptablesModuleFlag,
util.IptablesCommentModuleFlag,
util.IptablesCommentFlag,
@ -1108,7 +1118,9 @@ func TestTranslateEgress(t *testing.T) {
util.IptablesDstPortFlag,
"6783",
util.IptablesJumpFlag,
util.IptablesAccept,
util.IptablesMark,
util.IptablesSetMarkFlag,
util.IptablesAzureEgressXMarkHex,
util.IptablesModuleFlag,
util.IptablesCommentModuleFlag,
util.IptablesCommentFlag,
@ -1252,7 +1264,9 @@ func TestAllowBackendToFrontend(t *testing.T) {
util.GetHashedName("app:backend"),
util.IptablesDstFlag,
util.IptablesJumpFlag,
util.IptablesAccept,
util.IptablesMark,
util.IptablesSetMarkFlag,
util.IptablesAzureIngressMarkHex,
util.IptablesModuleFlag,
util.IptablesCommentModuleFlag,
util.IptablesCommentFlag,
@ -1379,7 +1393,9 @@ func TestAllowAllToAppFrontend(t *testing.T) {
util.GetHashedName("app:frontend"),
util.IptablesDstFlag,
util.IptablesJumpFlag,
util.IptablesAccept,
util.IptablesMark,
util.IptablesSetMarkFlag,
util.IptablesAzureIngressMarkHex,
util.IptablesModuleFlag,
util.IptablesCommentModuleFlag,
util.IptablesCommentFlag,
@ -1480,7 +1496,9 @@ func TestNamespaceToFrontend(t *testing.T) {
util.GetHashedName("app:frontend"),
util.IptablesDstFlag,
util.IptablesJumpFlag,
util.IptablesAccept,
util.IptablesMark,
util.IptablesSetMarkFlag,
util.IptablesAzureIngressMarkHex,
util.IptablesModuleFlag,
util.IptablesCommentModuleFlag,
util.IptablesCommentFlag,
@ -1613,7 +1631,9 @@ func TestAllowAllNamespacesToAppFrontend(t *testing.T) {
util.GetHashedName("app:frontend"),
util.IptablesDstFlag,
util.IptablesJumpFlag,
util.IptablesAccept,
util.IptablesMark,
util.IptablesSetMarkFlag,
util.IptablesAzureIngressMarkHex,
util.IptablesModuleFlag,
util.IptablesCommentModuleFlag,
util.IptablesCommentFlag,
@ -1761,7 +1781,9 @@ func TestAllowNamespaceDevToAppFrontend(t *testing.T) {
util.GetHashedName("app:frontend"),
util.IptablesDstFlag,
util.IptablesJumpFlag,
util.IptablesAccept,
util.IptablesMark,
util.IptablesSetMarkFlag,
util.IptablesAzureIngressMarkHex,
util.IptablesModuleFlag,
util.IptablesCommentModuleFlag,
util.IptablesCommentFlag,
@ -1913,7 +1935,9 @@ func TestAllowAllToK0AndK1AndAppFrontend(t *testing.T) {
util.GetHashedName("k1:v1"),
util.IptablesDstFlag,
util.IptablesJumpFlag,
util.IptablesAccept,
util.IptablesMark,
util.IptablesSetMarkFlag,
util.IptablesAzureIngressMarkHex,
util.IptablesModuleFlag,
util.IptablesCommentModuleFlag,
util.IptablesCommentFlag,
@ -2103,7 +2127,9 @@ func TestAllowNsDevAndAppBackendToAppFrontend(t *testing.T) {
util.GetHashedName("app:backend"),
util.IptablesSrcFlag,
util.IptablesJumpFlag,
util.IptablesAccept,
util.IptablesMark,
util.IptablesSetMarkFlag,
util.IptablesAzureIngressMarkHex,
util.IptablesModuleFlag,
util.IptablesCommentModuleFlag,
util.IptablesCommentFlag,
@ -2231,7 +2257,9 @@ func TestAllowInternalAndExternal(t *testing.T) {
util.GetHashedName("app:backdoor"),
util.IptablesDstFlag,
util.IptablesJumpFlag,
util.IptablesAccept,
util.IptablesMark,
util.IptablesSetMarkFlag,
util.IptablesAzureIngressMarkHex,
util.IptablesModuleFlag,
util.IptablesCommentModuleFlag,
util.IptablesCommentFlag,
@ -2305,7 +2333,9 @@ func TestAllowBackendToFrontendPort8000(t *testing.T) {
util.IptablesDstPortFlag,
"8000",
util.IptablesJumpFlag,
util.IptablesAccept,
util.IptablesMark,
util.IptablesSetMarkFlag,
util.IptablesAzureIngressMarkHex,
util.IptablesModuleFlag,
util.IptablesCommentModuleFlag,
util.IptablesCommentFlag,
@ -2420,7 +2450,9 @@ func TestAllowBackendToFrontendWithMissingPort(t *testing.T) {
util.GetHashedName("app:backend"),
util.IptablesSrcFlag,
util.IptablesJumpFlag,
util.IptablesAccept,
util.IptablesMark,
util.IptablesSetMarkFlag,
util.IptablesAzureIngressMarkHex,
util.IptablesModuleFlag,
util.IptablesCommentModuleFlag,
util.IptablesCommentFlag,
@ -2549,7 +2581,9 @@ func TestAllowMultipleLabelsToMultipleLabels(t *testing.T) {
util.GetHashedName("team:aks"),
util.IptablesDstFlag,
util.IptablesJumpFlag,
util.IptablesAccept,
util.IptablesMark,
util.IptablesSetMarkFlag,
util.IptablesAzureIngressMarkHex,
util.IptablesModuleFlag,
util.IptablesCommentModuleFlag,
util.IptablesCommentFlag,
@ -2590,7 +2624,9 @@ func TestAllowMultipleLabelsToMultipleLabels(t *testing.T) {
util.GetHashedName("team:aks"),
util.IptablesDstFlag,
util.IptablesJumpFlag,
util.IptablesAccept,
util.IptablesMark,
util.IptablesSetMarkFlag,
util.IptablesAzureIngressMarkHex,
util.IptablesModuleFlag,
util.IptablesCommentModuleFlag,
util.IptablesCommentFlag,
@ -2768,7 +2804,9 @@ func TestAllowAllFromAppBackend(t *testing.T) {
util.GetHashedName("app:backend"),
util.IptablesSrcFlag,
util.IptablesJumpFlag,
util.IptablesAccept,
util.IptablesMark,
util.IptablesSetMarkFlag,
util.IptablesAzureEgressXMarkHex,
util.IptablesModuleFlag,
util.IptablesCommentModuleFlag,
util.IptablesCommentFlag,
@ -2890,7 +2928,9 @@ func TestAllowAppFrontendToTCPPort53UDPPort53Policy(t *testing.T) {
util.GetHashedName("app:frontend"),
util.IptablesSrcFlag,
util.IptablesJumpFlag,
util.IptablesAccept,
util.IptablesMark,
util.IptablesSetMarkFlag,
util.IptablesAzureEgressXMarkHex,
util.IptablesModuleFlag,
util.IptablesCommentModuleFlag,
util.IptablesCommentFlag,
@ -2915,7 +2955,9 @@ func TestAllowAppFrontendToTCPPort53UDPPort53Policy(t *testing.T) {
util.GetHashedName("app:frontend"),
util.IptablesSrcFlag,
util.IptablesJumpFlag,
util.IptablesAccept,
util.IptablesMark,
util.IptablesSetMarkFlag,
util.IptablesAzureEgressXMarkHex,
util.IptablesModuleFlag,
util.IptablesCommentModuleFlag,
util.IptablesCommentFlag,
@ -2941,7 +2983,9 @@ func TestAllowAppFrontendToTCPPort53UDPPort53Policy(t *testing.T) {
util.GetHashedName(util.KubeAllNamespacesFlag),
util.IptablesDstFlag,
util.IptablesJumpFlag,
util.IptablesAccept,
util.IptablesMark,
util.IptablesSetMarkFlag,
util.IptablesAzureEgressXMarkHex,
util.IptablesModuleFlag,
util.IptablesCommentModuleFlag,
util.IptablesCommentFlag,
@ -3104,7 +3148,9 @@ func TestComplexPolicy(t *testing.T) {
util.IptablesDstPortFlag,
"6379",
util.IptablesJumpFlag,
util.IptablesAccept,
util.IptablesMark,
util.IptablesSetMarkFlag,
util.IptablesAzureIngressMarkHex,
util.IptablesModuleFlag,
util.IptablesCommentModuleFlag,
util.IptablesCommentFlag,
@ -3134,7 +3180,9 @@ func TestComplexPolicy(t *testing.T) {
util.IptablesDstPortFlag,
"6379",
util.IptablesJumpFlag,
util.IptablesAccept,
util.IptablesMark,
util.IptablesSetMarkFlag,
util.IptablesAzureIngressMarkHex,
util.IptablesModuleFlag,
util.IptablesCommentModuleFlag,
util.IptablesCommentFlag,
@ -3169,7 +3217,9 @@ func TestComplexPolicy(t *testing.T) {
util.IptablesDstPortFlag,
"6379",
util.IptablesJumpFlag,
util.IptablesAccept,
util.IptablesMark,
util.IptablesSetMarkFlag,
util.IptablesAzureIngressMarkHex,
util.IptablesModuleFlag,
util.IptablesCommentModuleFlag,
util.IptablesCommentFlag,
@ -3243,7 +3293,9 @@ func TestComplexPolicy(t *testing.T) {
util.GetHashedName(cidrEgressIpsetName),
util.IptablesDstFlag,
util.IptablesJumpFlag,
util.IptablesAccept,
util.IptablesMark,
util.IptablesSetMarkFlag,
util.IptablesAzureEgressXMarkHex,
util.IptablesModuleFlag,
util.IptablesCommentModuleFlag,
util.IptablesCommentFlag,
@ -3534,7 +3586,9 @@ func TestDropPrecedenceOverAllow(t *testing.T) {
util.GetHashedName("testIn:pod-A"),
util.IptablesDstFlag,
util.IptablesJumpFlag,
util.IptablesAccept,
util.IptablesMark,
util.IptablesSetMarkFlag,
util.IptablesAzureIngressMarkHex,
util.IptablesModuleFlag,
util.IptablesCommentModuleFlag,
util.IptablesCommentFlag,
@ -3575,7 +3629,9 @@ func TestDropPrecedenceOverAllow(t *testing.T) {
util.GetHashedName("testIn:pod-A"),
util.IptablesDstFlag,
util.IptablesJumpFlag,
util.IptablesAccept,
util.IptablesMark,
util.IptablesSetMarkFlag,
util.IptablesAzureIngressMarkHex,
util.IptablesModuleFlag,
util.IptablesCommentModuleFlag,
util.IptablesCommentFlag,
@ -3660,7 +3716,9 @@ func TestDropPrecedenceOverAllow(t *testing.T) {
util.GetHashedName("all-namespaces"),
util.IptablesDstFlag,
util.IptablesJumpFlag,
util.IptablesAccept,
util.IptablesMark,
util.IptablesSetMarkFlag,
util.IptablesAzureEgressXMarkHex,
util.IptablesModuleFlag,
util.IptablesCommentModuleFlag,
util.IptablesCommentFlag,
@ -3843,7 +3901,9 @@ func TestNamedPorts(t *testing.T) {
util.GetHashedName("namedport:serve-80"),
util.IptablesDstFlag + "," + util.IptablesDstFlag,
util.IptablesJumpFlag,
util.IptablesAccept,
util.IptablesMark,
util.IptablesSetMarkFlag,
util.IptablesAzureIngressMarkHex,
util.IptablesModuleFlag,
util.IptablesCommentModuleFlag,
util.IptablesCommentFlag,

Просмотреть файл

@ -40,6 +40,8 @@ const (
IptablesAccept string = "ACCEPT"
IptablesReject string = "REJECT"
IptablesDrop string = "DROP"
IptablesReturn string = "RETURN"
IptablesMark string = "MARK"
IptablesSrcFlag string = "src"
IptablesDstFlag string = "dst"
IptablesNotFlag string = "!"
@ -50,6 +52,9 @@ const (
IptablesModuleFlag string = "-m"
IptablesSetModuleFlag string = "set"
IptablesMatchSetFlag string = "--match-set"
IptablesSetMarkFlag string = "--set-mark"
IptablesMarkFlag string = "--mark"
IptablesMarkVerb string = "mark"
IptablesStateModuleFlag string = "state"
IptablesStateFlag string = "--state"
IptablesMultiportFlag string = "multiport"
@ -75,6 +80,15 @@ const (
IptablesAzureIngressFromPodChain string = "AZURE-NPM-INGRESS-FROM-POD"
IptablesAzureEgressToNsChain string = "AZURE-NPM-EGRESS-TO-NS"
IptablesAzureEgressToPodChain string = "AZURE-NPM-EGRESS-TO-POD"
// Below are the skb->mark NPM will use for different criteria
IptablesAzureIngressMarkHex string = "0x2000"
// IptablesAzureEgressXMarkHex is used for us to not override but append to the existing MARK
// https://unix.stackexchange.com/a/283455 comment contains the explanation on
// MARK manipulations with offset.
IptablesAzureEgressXMarkHex string = "0x1000/0x1000"
// IptablesAzureEgressMarkHex is for checking the absolute value of the mark
IptablesAzureEgressMarkHex string = "0x1000"
IptablesAzureAcceptMarkHex string = "0x3000"
)
//ipset related constants.