0

我有通过命令引导的 kubernetes 多控制平面集群:

kubeadm init --config kubeadm-config.yaml

kubeadm-config.yaml 包含:

apiVersion: kubeadm.k8s.io/v1beta2
kind: ClusterConfiguration
kubernetesVersion: stable
controlPlaneEndpoint: "10.10.10.120:6443"
apiServer:
  extraArgs:
    secure-port: "8080"
    advertise-address: "10.10.10.121"

为什么连接到 kubernetes.default.svc 服务的端点指向 10.10.10.121:8080 而不是 10.10.10.120:6443 ?

我可以改变这个,或者我在控制平面引导时犯了一些错误?

# kubectl describe endpoints kubernetes 
Name:         kubernetes
Namespace:    default
Labels:       <none>
Annotations:  <none>
Subsets:
  Addresses:          10.10.10.121
  NotReadyAddresses:  <none>
  Ports:
    Name   Port  Protocol
    ----   ----  --------
    https  8080  TCP

Events:  <none>
4

2 回答 2

1

这是由 kube-apiserver 内部管理的,我有一个模糊的记忆,只有在服务不存在时才会更新?您可以尝试删除服务/端点/切片并重新启动整个集群。

于 2021-05-21T20:12:39.713 回答
0

我知道问题出在哪里

在 kube-apiserver 清单中的所有主节点上是:

# cat /etc/kubernetes/manifests/kube-apiserver.yaml 
apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    component: kube-apiserver
    tier: control-plane
  name: kube-apiserver
  namespace: kube-system
spec:
  containers:
  - command:
    - kube-apiserver
    - --advertise-address=10.10.10.121

我修复了它,现在可以了:

# kubectl describe endpoints kubernetes 
Name:         kubernetes
Namespace:    default
Labels:       <none>
Annotations:  <none>
Subsets:
  Addresses:          10.10.10.121,10.10.10.122,10.10.10.123
  NotReadyAddresses:  <none>
  Ports:
    Name   Port  Protocol
    ----   ----  --------
    https  8080  TCP

Events:  <none>

问题:为什么 kubeadm join set Advertisement-address 在所有节点上等于 10.10.10.121,即使 kubeadm-config.yaml 中设置了正确的 IP 地址,例如在节点 2 上:

apiVersion: kubeadm.k8s.io/v1beta2
kind: ClusterConfiguration
kubernetesVersion: stable
controlPlaneEndpoint: "10.10.10.120:6443"
apiServer:
  extraArgs:
    secure-port: "8080"
    advertise-address: "10.10.10.122"
于 2021-05-24T16:49:27.767 回答