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
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 可能在 /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. 参考