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

fix: each apiserver process listens on its own IP address #2953

Merged
merged 3 commits into from Mar 30, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
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