在 Kubernetes 中为 Master 配置 AWS publicIP

Configure AWS publicIP for a Master in Kubernetes

我确实使用以下命令创建了一个主集群:

kubeadm init --pod-network-cidr $CALICO_NETWORK

现在正在监听内部IP 10.3.8.23:6443,这没问题,因为我希望master使用内部IP与Nodes通信。

现在我想使用 public IP 访问集群,但出现以下错误:

http:代理错误:x509:证书对 10.96.0.1、10.3.8.23 有效,对 18.230.*.*.

无效

如何为 publicIP 生成额外的证书?

我需要使用 public IP 才能使用浏览器访问仪表板。

我安装它使用:https://github.com/kubernetes/dashboard

如果您想使用 public IP 访问您的集群,您可以使用 kubeadm init 命令传递 IP。喜欢:

kubeadm init --apiserver-cert-extra-sans=private-ip,public-ip \
  --pod-network-cidr $CALICO_NETWORK \
  --apiserver-advertise-address=private-ip

如果您不想重新创建集群,您也可以执行此处所述的操作:

对于 K8s 1.7 及更早版本:

rm /etc/kubernetes/pki/apiserver.*
kubeadm alpha phase certs selfsign \
  --apiserver-advertise-address=0.0.0.0 \
  --cert-altnames=10.96.0.1 \
  --cert-altnames=10.3.8.23 \
  --cert-altnames=18.230.x.x  # <== Public IP
docker rm `docker ps -q -f 'name=k8s_kube-apiserver*'`
systemctl restart kubelet

对于更新的 K8s 1.8:

rm /etc/kubernetes/pki/apiserver.*
kubeadm alpha phase certs all \
  --apiserver-advertise-address=0.0.0.0 \
  --apiserver-cert-extra-sans=10.96.0.1,10.3.8.23,18.230.x.x # <== Public IP
docker rm -f `docker ps -q -f 'name=k8s_kube-apiserver*'`
systemctl restart kubelet

您还可以使用 --apiserver-cert-extra-sans 选项添加 DNS 名称。