Skip to content

Commit 594e096

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

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
@@ -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

+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)