Skip to content

Commit 24794ae

Browse files
Merge pull request #20115 from pravisankar/egress-router-add-dns-route
Allow egress-router to connect to DNS IP
2 parents 561a42d + 594e096 commit 24794ae

File tree

7 files changed

+30
-21
lines changed

7 files changed

+30
-21
lines changed

pkg/cmd/server/kubernetes/network/sdn_linux.go

+1
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ func NewSDNInterfaces(options configapi.NodeConfig, networkClient networkclient.
5656
PluginName: options.NetworkConfig.NetworkPluginName,
5757
Hostname: options.NodeName,
5858
SelfIP: options.NodeIP,
59+
DNSIP: options.DNSIP,
5960
RuntimeEndpoint: runtimeEndpoint,
6061
CNIBinDir: cniBinDir,
6162
CNIConfDir: cniConfDir,

pkg/network/node/cniserver/cniserver.go

+1
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ const CNIServerConfigFilePath string = CNIServerRunDir + "/" + CNIServerConfigFi
5959
type Config struct {
6060
MTU uint32 `json:"mtu"`
6161
ServiceNetworkCIDR string `json:"serviceNetworkCIDR"`
62+
DNSIP string `json:"dnsIP"`
6263
}
6364

6465
// Explicit type for CNI commands the server handles

pkg/network/node/cniserver/cniserver_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ func TestCNIServer(t *testing.T) {
6262
defer os.RemoveAll(tmpDir)
6363
socketPath := filepath.Join(tmpDir, CNIServerSocketName)
6464

65-
s := NewCNIServer(tmpDir, &Config{MTU: 1500, ServiceNetworkCIDR: "172.30.0.0/16"})
65+
s := NewCNIServer(tmpDir, &Config{MTU: 1500, ServiceNetworkCIDR: "172.30.0.0/16", DNSIP: "172.30.0.1"})
6666
if err := s.Start(serverHandleCNI); err != nil {
6767
t.Fatalf("error starting CNI server: %v", err)
6868
}

pkg/network/node/node.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ type OsdnNodeConfig struct {
7171
PluginName string
7272
Hostname string
7373
SelfIP string
74+
DNSIP string
7475
RuntimeEndpoint string
7576
MTU uint32
7677
EnableHostports bool
@@ -169,7 +170,7 @@ func New(c *OsdnNodeConfig) (*OsdnNode, error) {
169170
networkClient: c.NetworkClient,
170171
recorder: c.Recorder,
171172
oc: oc,
172-
podManager: newPodManager(c.KClient, policy, c.MTU, c.CNIBinDir, oc, c.EnableHostports),
173+
podManager: newPodManager(c.KClient, policy, c.MTU, c.CNIBinDir, oc, c.EnableHostports, c.DNSIP),
173174
localIP: c.SelfIP,
174175
hostName: c.Hostname,
175176
useConnTrack: useConnTrack,

pkg/network/node/pod.go

+6-2
Original file line numberDiff line numberDiff line change
@@ -82,10 +82,13 @@ type podManager struct {
8282
// and thus can be set from Start()
8383
ipamConfig []byte
8484
hostportSyncer kubehostport.HostportSyncer
85+
86+
// IP address that pods will use to access cluster DNS
87+
dnsIP string
8588
}
8689

8790
// Creates a new live podManager; used by node code0
88-
func newPodManager(kClient kclientset.Interface, policy osdnPolicy, mtu uint32, cniBinPath string, ovs *ovsController, enableHostports bool) *podManager {
91+
func newPodManager(kClient kclientset.Interface, policy osdnPolicy, mtu uint32, cniBinPath string, ovs *ovsController, enableHostports bool, dnsIP string) *podManager {
8992
pm := newDefaultPodManager()
9093
pm.kClient = kClient
9194
pm.policy = policy
@@ -94,6 +97,7 @@ func newPodManager(kClient kclientset.Interface, policy osdnPolicy, mtu uint32,
9497
pm.podHandler = pm
9598
pm.ovs = ovs
9699
pm.enableHostports = enableHostports
100+
pm.dnsIP = dnsIP
97101
return pm
98102
}
99103

@@ -180,7 +184,7 @@ func (m *podManager) Start(rundir string, localSubnetCIDR string, clusterNetwork
180184

181185
go m.processCNIRequests()
182186

183-
m.cniServer = cniserver.NewCNIServer(rundir, &cniserver.Config{MTU: m.mtu, ServiceNetworkCIDR: serviceNetworkCIDR})
187+
m.cniServer = cniserver.NewCNIServer(rundir, &cniserver.Config{MTU: m.mtu, ServiceNetworkCIDR: serviceNetworkCIDR, DNSIP: m.dnsIP})
184188
return m.cniServer.Start(m.handleCNIRequest)
185189
}
186190

pkg/network/sdn-cni-plugin/openshift-sdn.go

+18-16
Original file line numberDiff line numberDiff line change
@@ -205,30 +205,32 @@ func (p *cniPlugin) CmdAdd(args *skel.CmdArgs) error {
205205
if err != nil {
206206
return fmt.Errorf("failed to configure macvlan device: %v", err)
207207
}
208+
209+
var dsts []*net.IPNet
208210
for _, addr := range addrs {
209-
route := &netlink.Route{
210-
Dst: &net.IPNet{
211-
IP: addr.IP,
212-
Mask: net.CIDRMask(32, 32),
213-
},
214-
Gw: defaultGW,
215-
}
216-
if err := netlink.RouteAdd(route); err != nil {
217-
return fmt.Errorf("failed to add route to node IP: %v", err)
218-
}
211+
dsts = append(dsts, &net.IPNet{IP: addr.IP, Mask: net.CIDRMask(32, 32)})
219212
}
220213

221-
// Add a route to service network via SDN
222214
_, serviceIPNet, err := net.ParseCIDR(config.ServiceNetworkCIDR)
223215
if err != nil {
224216
return fmt.Errorf("failed to parse ServiceNetworkCIDR: %v", err)
225217
}
226-
route := &netlink.Route{
227-
Dst: serviceIPNet,
228-
Gw: defaultGW,
218+
dsts = append(dsts, serviceIPNet)
219+
220+
dnsIP := net.ParseIP(config.DNSIP)
221+
if dnsIP == nil {
222+
return fmt.Errorf("failed to parse dns IP: %v", err)
229223
}
230-
if err := netlink.RouteAdd(route); err != nil {
231-
return fmt.Errorf("failed to add route to service network: %v", err)
224+
dsts = append(dsts, &net.IPNet{IP: dnsIP, Mask: net.CIDRMask(32, 32)})
225+
226+
for _, dst := range dsts {
227+
route := &netlink.Route{
228+
Dst: dst,
229+
Gw: defaultGW,
230+
}
231+
if err := netlink.RouteAdd(route); err != nil {
232+
return fmt.Errorf("failed to add route to dst: %v via SDN: %v", dst, err)
233+
}
232234
}
233235
}
234236

pkg/network/sdn-cni-plugin/sdn_cni_plugin_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ func TestOpenshiftSdnCNIPlugin(t *testing.T) {
8383
defer os.RemoveAll(tmpDir)
8484

8585
path := filepath.Join(tmpDir, cniserver.CNIServerSocketName)
86-
server := cniserver.NewCNIServer(tmpDir, &cniserver.Config{MTU: 1500, ServiceNetworkCIDR: "172.30.0.0/16"})
86+
server := cniserver.NewCNIServer(tmpDir, &cniserver.Config{MTU: 1500, ServiceNetworkCIDR: "172.30.0.0/16", DNSIP: "172.30.0.1"})
8787
if err := server.Start(serverHandleCNI); err != nil {
8888
t.Fatalf("error starting CNI server: %v", err)
8989
}

0 commit comments

Comments
 (0)