mirror of https://github.com/k3s-io/k3s
Add brackets around IPv6 kube-dns liveness probe addrs
When a Kubernetes cluster is instantiated in IPv6-only mode via 'kubeadm init ...', the liveness probes that are configured by kubeadm for kube-dns currently use IP:port strings of "::1:53" and "::1:10053". These IP:port strings should instead include brackets around the ::1 IPv6 loopback address, e.g. "[::1]:53" and "[::1]:10053". This change adds the necessary brackets around the ::1 IPv6 loopback address. Without this change, the kube-dns sidecar container interprets the bracket-less strings as IPv4 IP:port strings that have too many colons, and the kube-dns pod is restarted about once every 2 minutes. fixes #56543 /area ipv6 /sig networkpull/6/head
parent
2c9ffc0e88
commit
d626de113f
|
@ -63,22 +63,25 @@ func kubeDNSAddon(cfg *kubeadmapi.MasterConfiguration, client clientset.Interfac
|
|||
return err
|
||||
}
|
||||
|
||||
var dnsBindAddr string
|
||||
var dnsBindAddr, dnsProbeAddr string
|
||||
if dnsip.To4() == nil {
|
||||
dnsBindAddr = "::1"
|
||||
dnsProbeAddr = "[" + dnsBindAddr + "]"
|
||||
} else {
|
||||
dnsBindAddr = "127.0.0.1"
|
||||
dnsProbeAddr = dnsBindAddr
|
||||
}
|
||||
|
||||
// Get the YAML manifest conditionally based on the k8s version
|
||||
kubeDNSDeploymentBytes := GetKubeDNSManifest(k8sVersion)
|
||||
dnsDeploymentBytes, err := kubeadmutil.ParseTemplate(kubeDNSDeploymentBytes,
|
||||
struct{ ImageRepository, Arch, Version, DNSBindAddr, DNSDomain, DNSProbeType, MasterTaintKey string }{
|
||||
struct{ ImageRepository, Arch, Version, DNSBindAddr, DNSProbeAddr, DNSDomain, DNSProbeType, MasterTaintKey string }{
|
||||
ImageRepository: cfg.ImageRepository,
|
||||
Arch: runtime.GOARCH,
|
||||
// Get the kube-dns version conditionally based on the k8s version
|
||||
Version: GetDNSVersion(k8sVersion, kubeadmconstants.KubeDNS),
|
||||
DNSBindAddr: dnsBindAddr,
|
||||
DNSProbeAddr: dnsProbeAddr,
|
||||
DNSDomain: cfg.Networking.DNSDomain,
|
||||
DNSProbeType: GetKubeDNSProbeType(k8sVersion),
|
||||
MasterTaintKey: kubeadmconstants.LabelNodeRoleMaster,
|
||||
|
|
|
@ -92,11 +92,12 @@ func TestCompileManifests(t *testing.T) {
|
|||
}{
|
||||
{
|
||||
manifest: v180AndAboveKubeDNSDeployment,
|
||||
data: struct{ ImageRepository, Arch, Version, DNSBindAddr, DNSDomain, DNSProbeType, MasterTaintKey string }{
|
||||
data: struct{ ImageRepository, Arch, Version, DNSBindAddr, DNSProbeAddr, DNSDomain, DNSProbeType, MasterTaintKey string }{
|
||||
ImageRepository: "foo",
|
||||
Arch: "foo",
|
||||
Version: "foo",
|
||||
DNSBindAddr: "foo",
|
||||
DNSProbeAddr: "foo",
|
||||
DNSDomain: "foo",
|
||||
DNSProbeType: "foo",
|
||||
MasterTaintKey: "foo",
|
||||
|
|
|
@ -156,8 +156,8 @@ spec:
|
|||
args:
|
||||
- --v=2
|
||||
- --logtostderr
|
||||
- --probe=kubedns,{{ .DNSBindAddr }}:10053,kubernetes.default.svc.{{ .DNSDomain }},5,{{ .DNSProbeType }}
|
||||
- --probe=dnsmasq,{{ .DNSBindAddr }}:53,kubernetes.default.svc.{{ .DNSDomain }},5,{{ .DNSProbeType }}
|
||||
- --probe=kubedns,{{ .DNSProbeAddr }}:10053,kubernetes.default.svc.{{ .DNSDomain }},5,{{ .DNSProbeType }}
|
||||
- --probe=dnsmasq,{{ .DNSProbeAddr }}:53,kubernetes.default.svc.{{ .DNSDomain }},5,{{ .DNSProbeType }}
|
||||
ports:
|
||||
- containerPort: 10054
|
||||
name: metrics
|
||||
|
|
Loading…
Reference in New Issue