Skip to content
This repository has been archived by the owner on Oct 24, 2023. It is now read-only.

Commit

Permalink
fix: each apiserver process listens on its own IP address (#2953)
Browse files Browse the repository at this point in the history
  • Loading branch information
jackfrancis committed Mar 30, 2020
1 parent 6381d64 commit be1253c
Show file tree
Hide file tree
Showing 4 changed files with 7 additions and 25 deletions.
3 changes: 2 additions & 1 deletion parts/k8s/cloud-init/masternodecustomdata.yml
Expand Up @@ -402,6 +402,7 @@ MASTER_CONTAINER_ADDONS_PLACEHOLDER
content: |
#!/bin/bash
set -e
PRIVATE_IP=$(hostname -i | cut -d" " -f1)
{{if IsMasterVirtualMachineScaleSets}}
PRIVATE_IP=$(hostname -i | cut -d" " -f1)
sed -i "s|<SERVERIP>|https://$PRIVATE_IP:443|g" "/var/lib/kubelet/kubeconfig"
Expand All @@ -410,7 +411,7 @@ MASTER_CONTAINER_ADDONS_PLACEHOLDER
# Redirect ILB (4443) traffic to port 443 (ELB) in the prerouting chain
iptables -t nat -A PREROUTING -p tcp --dport 4443 -j REDIRECT --to-port 443
{{end}}
sed -i "s|<advertiseAddr>|{{WrapAsVariable "kubernetesAPIServerIP"}}|g" /etc/kubernetes/manifests/kube-apiserver.yaml
sed -i "s|<advertiseAddr>|$PRIVATE_IP|g" /etc/kubernetes/manifests/kube-apiserver.yaml

{{if EnableDataEncryptionAtRest }}
sed -i "s|<etcdEncryptionSecret>|\"{{WrapAsParameter "etcdEncryptionKey"}}\"|g" /etc/kubernetes/encryption-config.yaml
Expand Down
3 changes: 2 additions & 1 deletion pkg/engine/templates_generated.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

23 changes: 0 additions & 23 deletions test/e2e/kubernetes/kubernetes_test.go
Expand Up @@ -10,7 +10,6 @@ import (
"io"
"log"
"math/rand"
"net"
"os"
"os/exec"
"path/filepath"
Expand Down Expand Up @@ -622,28 +621,6 @@ var _ = Describe("Azure Container Cluster using the Kubernetes Orchestrator", fu
}
})

It("should have the correct IP address for the apiserver", func() {
running, err := pod.WaitOnSuccesses(common.APIServerComponentName, "kube-system", kubeSystemPodsReadinessChecks, sleepBetweenRetriesWhenWaitingForPodReady, cfg.Timeout)
Expect(err).NotTo(HaveOccurred())
Expect(running).To(Equal(true))
pods, err := pod.GetAllRunningByPrefixWithRetry(common.APIServerComponentName, "kube-system", 3*time.Second, cfg.Timeout)
Expect(err).NotTo(HaveOccurred())
By("Ensuring that the correct IP address has been applied to the apiserver")
expectedIPAddress := eng.ExpandedDefinition.Properties.MasterProfile.FirstConsecutiveStaticIP
if eng.ExpandedDefinition.Properties.MasterProfile.HasMultipleNodes() {
firstMasterIP := net.ParseIP(eng.ExpandedDefinition.Properties.MasterProfile.FirstConsecutiveStaticIP).To4()
expectedIP := net.IP{firstMasterIP[0], firstMasterIP[1], firstMasterIP[2], firstMasterIP[3] + byte(common.DefaultInternalLbStaticIPOffset)}
if eng.ExpandedDefinition.Properties.MasterProfile.IsVirtualMachineScaleSets() {
expectedIP = net.IP{firstMasterIP[0], firstMasterIP[1], byte(255), byte(common.DefaultInternalLbStaticIPOffset)}
}
expectedIPAddress = expectedIP.String()
}

actualIPAddress, err := pods[0].Spec.Containers[0].GetArg("--advertise-address")
Expect(err).NotTo(HaveOccurred())
Expect(actualIPAddress).To(Equal(expectedIPAddress))
})

It("should have core kube-system componentry running", func() {
coreComponents := []string{"kube-proxy", "kube-addon-manager", common.APIServerComponentName, "kube-controller-manager", "kube-scheduler"}
if to.Bool(eng.ExpandedDefinition.Properties.OrchestratorProfile.KubernetesConfig.UseCloudControllerManager) {
Expand Down
3 changes: 3 additions & 0 deletions test/e2e/kubernetes/workloads/busybox-master.yaml
Expand Up @@ -9,6 +9,9 @@ spec:
- name: init-resolver
image: busybox:1.31.1
command: ['sh', '-c', 'until nc -nvz $(grep nameserver /etc/resolv.conf | cut -d" " -f2) 53; do echo waiting for container DNS resolver access; sleep 3; done;']
- name: init-kubernetes-net
image: busybox:1.31.1
command: ['sh', '-c', 'until nc -vz kubernetes 443 && nc -vz kubernetes.default.svc 443 && nc -vz kubernetes.default.svc.cluster.local 443; do echo waiting for successful connection to apiserver endpoint; sleep 3; done;']
- name: init-dns
image: busybox:1.31.1
command: ['sh', '-c', 'until nslookup mcr.microsoft.com; do echo waiting for successful container DNS resolution; sleep 3; done;']
Expand Down

0 comments on commit be1253c

Please sign in to comment.