Please enable Javascript to view the contents

如何给 Kubernetes Apiserver 新增访问入口

 ·  ☕ 2 分钟

1. 本地怎么访问远程集群

在研发时,需要直接连接远端 Kubernetes 集群。通常的做法是,将 /etc/kubernetes/admin.conf 拷贝到本地 ~/.kube/kubeconfig

但是 kubeconfig 的 server 地址是 kubernetes.default.svc。因此,我们需要配置一个 hosts:

1
1.1.1.1 kubernetes.default.svc

如果需要在不同集群之间切换,不仅需要更换 kubeconfig,还需要修改 hosts。下面介绍一种方法,可以直接将远程访问地址,添加到集群的证书中,节省修改 hosts 的步骤,同时还能让人更容易区分不同集群。

2. 查看 Apiserver 证书包含哪些地址

  • 进入证书目录
1
cd /etc/kubernetes/pki
  • 查看证书
1
2
3
4
openssl x509 -in apiserver.crt -noout -text

X509v3 Subject Alternative Name:
                DNS:1-1-1-1, DNS:kubernetes, DNS:kubernetes.default, DNS:kubernetes.default.svc, DNS:kubernetes.default.svc.cluster.local, DNS:lb-apiserver.kubernetes.local, DNS:localhost, IP Address:1.1.1.1

这里如果只允许通过 1.1.1.1 访问集群的 Apiserver。如果需要使用域名,kubernetes、kubernetes.default、kubernetes.default.svc 等,则需要配置 hosts 将其指向 1.1.1.1 。

3. 添加新的域名或 IP 到证书

  • 备份证书
1
2
3
cd /etc/kubernetes/pki
mv apiserver.crt apiserver.crt.bak
mv apiserver.key apiserver.key.bak
  • 修改 kubeadm-config.yaml

kubeadm-config.yaml 可能在 /etc/kubernetes/kubeadm-config.yaml,也有可能在 /root/kubeadm-config.yaml,具体位置与安装方式、安装工具有关。

在 ClusterConfiguration 的 apiServer 字段下,找到 certSANs。

1
2
3
4
5
6
7
8
9
apiVersion: kubeadm.k8s.io/v1beta2
kind: ClusterConfiguration
...
  certSANs:
    - kubernetes
    - kubernetes.default
    - kubernetes.default.svc
    - kubernetes.default.svc.cluster.local
    - 10.233.0.1

在 certSANs 中添加远程访问的域名或 IP 地址:

1
2
3
4
5
6
7
  certSANs:
    - remote.domain.com
    - kubernetes
    - kubernetes.default
    - kubernetes.default.svc
    - kubernetes.default.svc.cluster.local
    - 10.233.0.1
  • 重新生成证书
1
kubeadm init phase certs apiserver --config /root/kubeadm-config.yaml

执行之后,立即生效。如果有多个 Master,那么需要依次更新全部证书。

4. 参考


微信公众号
作者
微信公众号