Skip to content

Commit c28619b

Browse files
author
Ravi Sankar Penta
committed
Allow egress-router to connect to DNS IP
1 parent db3845c commit c28619b

File tree

7 files changed

+28
-5
lines changed

7 files changed

+28
-5
lines changed

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

+1
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ func NewSDNInterfaces(options configapi.NodeConfig, networkClient networkclient.
5757
PluginName: options.NetworkConfig.NetworkPluginName,
5858
Hostname: options.NodeName,
5959
SelfIP: options.NodeIP,
60+
DNSIP: options.DNSIP,
6061
RuntimeEndpoint: runtimeEndpoint,
6162
CNIBinDir: cniBinDir,
6263
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
@@ -72,6 +72,7 @@ type OsdnNodeConfig struct {
7272
PluginName string
7373
Hostname string
7474
SelfIP string
75+
DNSIP string
7576
RuntimeEndpoint string
7677
MTU uint32
7778
EnableHostports bool
@@ -173,7 +174,7 @@ func New(c *OsdnNodeConfig) (*OsdnNode, error) {
173174
networkClient: c.NetworkClient,
174175
recorder: c.Recorder,
175176
oc: oc,
176-
podManager: newPodManager(c.KClient, policy, c.MTU, c.CNIBinDir, oc, c.EnableHostports),
177+
podManager: newPodManager(c.KClient, policy, c.MTU, c.CNIBinDir, oc, c.EnableHostports, c.DNSIP),
177178
localIP: c.SelfIP,
178179
hostName: c.Hostname,
179180
useConnTrack: useConnTrack,

pkg/network/node/pod.go

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

8891
// Creates a new live podManager; used by node code0
89-
func newPodManager(kClient kclientset.Interface, policy osdnPolicy, mtu uint32, cniBinPath string, ovs *ovsController, enableHostports bool) *podManager {
92+
func newPodManager(kClient kclientset.Interface, policy osdnPolicy, mtu uint32, cniBinPath string, ovs *ovsController, enableHostports bool, dnsIP string) *podManager {
9093
pm := newDefaultPodManager()
9194
pm.kClient = kClient
9295
pm.policy = policy
@@ -95,6 +98,7 @@ func newPodManager(kClient kclientset.Interface, policy osdnPolicy, mtu uint32,
9598
pm.podHandler = pm
9699
pm.ovs = ovs
97100
pm.enableHostports = enableHostports
101+
pm.dnsIP = dnsIP
98102
return pm
99103
}
100104

@@ -181,7 +185,7 @@ func (m *podManager) Start(rundir string, localSubnetCIDR string, clusterNetwork
181185

182186
go m.processCNIRequests()
183187

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

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

+16
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,22 @@ func (p *cniPlugin) CmdAdd(args *skel.CmdArgs) error {
230230
if err := netlink.RouteAdd(route); err != nil {
231231
return fmt.Errorf("failed to add route to service network: %v", err)
232232
}
233+
234+
// Add a route to DNS IP via SDN
235+
dnsIP := net.ParseIP(config.DNSIP)
236+
if dnsIP == nil {
237+
return fmt.Errorf("failed to parse dns IP: %v", err)
238+
}
239+
route = &netlink.Route{
240+
Dst: &net.IPNet{
241+
IP: dnsIP,
242+
Mask: net.CIDRMask(32, 32),
243+
},
244+
Gw: defaultGW,
245+
}
246+
if err := netlink.RouteAdd(route); err != nil {
247+
return fmt.Errorf("failed to add route to dns IP: %v", err)
248+
}
233249
}
234250

235251
return nil

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)