1

我在裸机集群上设置了一个 k8skubeadm init集群。

我注意到kube-apiserver它在私有 IP 上暴露了它的接口:

# kubectl get pods kube-apiserver-cluster1 -n kube-system -o wide
NAME                                        READY   STATUS    RESTARTS   AGE     IP           NODE                         NOMINATED NODE   READINESS GATES
kube-apiserver-cluster1                     1/1     Running   0          6d22h   10.11.1.99   cluster1   <none>           <none>

这是集群内的 kube 配置:

# kubectl config view
apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: DATA+OMITTED
    server: https://10.11.1.99:6443
  name: kubernetes
contexts:
- context:
    cluster: kubernetes
    user: kubernetes-admin
  name: kubernetes-admin@kubernetes
current-context: kubernetes-admin@kubernetes
kind: Config
preferences: {}
users:
- name: kubernetes-admin
  user:
    client-certificate-data: REDACTED
    client-key-data: REDACTED

这对于在集群上本地使用来说很好kubectl,但我想添加一个额外的接口来公开kube-apiserver使用公共 IP 地址。最终,我尝试kubectl从笔记本电脑进行配置以远程访问集群。

如何kube-apiserver在外部 IP 地址上公开?

4

1 回答 1

3

执行以下命令:

$ kubeadm init --pod-network-cidr=<ip-range> --apiserver-advertise-address=0.0.0.0 --apiserver-cert-extra-sans=<PRIVATE_IP>[,<PUBLIC_IP>,...]

.kube/config如果您从远程使用 kubectl,请不要忘记将私有 IP 替换为您的公共 IP 。

也可以将master节点的私网IP转发到worker节点上master节点的公网IP。在运行之前在工作节点上运行此命令kubeadm join
$ sudo iptables -t nat -A OUTPUT -d <Private IP of master node> -j DNAT --to-destination <Public IP of master node>。但请记住,您还必须在主节点上以相同的方式转发工作人员私有 IP,以使一切正常运行(如果它们遇到同样的问题,即被云提供商 NAT 覆盖)。

查看更多:apiserver-ipkube-apiserver

于 2020-09-10T12:54:49.050 回答