diff --git a/pkg/proxy/ipvs/proxier.go b/pkg/proxy/ipvs/proxier.go index c8c8563e65c..64742868557 100644 --- a/pkg/proxy/ipvs/proxier.go +++ b/pkg/proxy/ipvs/proxier.go @@ -127,8 +127,8 @@ var ipsetInfo = []struct { {kubeNodePortLocalSetTCP, utilipset.BitmapPort, kubeNodePortLocalSetTCPComment}, {kubeNodePortSetUDP, utilipset.BitmapPort, kubeNodePortSetUDPComment}, {kubeNodePortLocalSetUDP, utilipset.BitmapPort, kubeNodePortLocalSetUDPComment}, - {kubeNodePortSetSCTP, utilipset.BitmapPort, kubeNodePortSetSCTPComment}, - {kubeNodePortLocalSetSCTP, utilipset.BitmapPort, kubeNodePortLocalSetSCTPComment}, + {kubeNodePortSetSCTP, utilipset.HashIPPort, kubeNodePortSetSCTPComment}, + {kubeNodePortLocalSetSCTP, utilipset.HashIPPort, kubeNodePortLocalSetSCTPComment}, } // ipsetWithIptablesChain is the ipsets list with iptables source chain and the chain jump to @@ -153,8 +153,8 @@ var ipsetWithIptablesChain = []struct { {kubeNodePortSetTCP, string(KubeNodePortChain), string(KubeMarkMasqChain), "dst", "tcp"}, {kubeNodePortLocalSetUDP, string(KubeNodePortChain), "RETURN", "dst", "udp"}, {kubeNodePortSetUDP, string(KubeNodePortChain), string(KubeMarkMasqChain), "dst", "udp"}, - {kubeNodePortSetSCTP, string(kubeServicesChain), string(KubeNodePortChain), "dst", "sctp"}, - {kubeNodePortLocalSetSCTP, string(KubeNodePortChain), "RETURN", "dst", "sctp"}, + {kubeNodePortSetSCTP, string(KubeNodePortChain), string(KubeMarkMasqChain), "dst,dst", "sctp"}, + {kubeNodePortLocalSetSCTP, string(KubeNodePortChain), "RETURN", "dst,dst", "sctp"}, } // In IPVS proxy mode, the following flags need to be set @@ -1096,20 +1096,32 @@ func (proxier *Proxier) syncProxyRules() { // Nodeports need SNAT, unless they're local. // ipset call - entry = &utilipset.Entry{ - // No need to provide ip info - Port: svcInfo.NodePort, - Protocol: protocol, - SetType: utilipset.BitmapPort, - } var nodePortSet *IPSet switch protocol { case "tcp": nodePortSet = proxier.ipsetList[kubeNodePortSetTCP] + entry = &utilipset.Entry{ + // No need to provide ip info + Port: svcInfo.NodePort, + Protocol: protocol, + SetType: utilipset.BitmapPort, + } case "udp": nodePortSet = proxier.ipsetList[kubeNodePortSetUDP] + entry = &utilipset.Entry{ + // No need to provide ip info + Port: svcInfo.NodePort, + Protocol: protocol, + SetType: utilipset.BitmapPort, + } case "sctp": nodePortSet = proxier.ipsetList[kubeNodePortSetSCTP] + entry = &utilipset.Entry{ + IP: proxier.nodeIP.String(), + Port: svcInfo.NodePort, + Protocol: protocol, + SetType: utilipset.HashIPPort, + } default: // It should never hit klog.Errorf("Unsupported protocol type: %s", protocol)