教程来源
通常情况下, kubernetes 集群是内网环境,如果希望通过本地访问这个集群,怎么办呢?大家想到的是 Kubeadm 在初始化的时候会为管理员生成一个 Kubeconfig 文件,把它下载下来 是不是就可以?事实证明这样不行, 因为这个集群是内网集群,Kubeconfig 文件 中 APIServer 的地址是内网 ip。解决方案很简单,把公网 ip 签到证书里面就可以,其中有 apiServerCertSANs 这个选项,只要把公网 IP 写到这里,再启动这个集群的时候,这个公网 ip 就会签到证书里。
1. 环境信息
- 安装方式:kubeadm
- 内网 IP:192.168.0.8
- 外网 IP:139.198.19.37
- 证书目录:/etc/kubernetes/pki
- kubeadm 配置文件目录:/etc/kubernetes/kubeadm-config.yaml
2. 查看 apiserver 的证书包含的 ip, 进入到证书目录执行
cd /etc/kubernetes/pki
openssl x509 -in apiserver.crt -noout -text
openssl x509 -in apiserver.crt -noout -text
Certificate:
Data:
................
Validity
Not Before: Jun 5 02:26:44 2020 GMT
Not After : Jun 5 02:26:44 2021 GMT
..................
X509v3 extensions:
..........
X509v3 Subject Alternative Name:
IP Address:192.168.0.8
.......
3. 添加公网 IP 到 apiserver
绑定的公网 ip 为 139.198.19.37 ,确保公网 ip 的防火墙已经打开 6443 端口
- 3.1 登录到主节点,进入 /etc/kubernetes/ 目录下
- 3.2 修改 kubeadm-config.yaml,找到 ClusterConfiguration 中的 certSANs (如无,在 apiServer 下添加这一配置),如下。添加刚才绑定的 139.198.19.37 到 certSANs 下,保存文件。
apiVersion: kubeadm.k8s.io/v1beta2
kind: ClusterConfiguration
etcd:
external:
endpoints:
- https://192.168.0.8:2379
apiServer:
extraArgs:
authorization-mode: Node,RBAC
timeoutForControlPlane: 4m0s
certSANs:
- 192.168.0.8
- 139.198.19.37
- 3.3 执行如下命令更新 apiserver.crt apiserver.key 注意需要把之前 apiserver.crt apiserver.key 做备份,进入到 pki 目录下,执行如下指令做备份:
mv apiserver.crt apiserver.crt-bak
mv apiserver.key apiserver.key-bak
备份完之后,回到 /etc/kubernetes 目录下,执行公网 ip 添加到 apiserver 操作指令为: kubeadm init phase certs apiserver –config kubeadm-config.yaml
kubeadm init phase certs apiserver --config kubeadm-config.yaml
[certs] Generating "apiserver" certificate and key
[certs] apiserver serving cert is signed for DNS names [192.168.0.8 139.198.19.37]
4.重启apiserver
kubeadm部署的集群,apiserver 是以static pod形式部署的,将apiserver的yaml文件移出,再移回即可
$ cd /etc/kubernetes/manifests
$ mv kube-apiserver.yaml ../
稍等2s
$ mv ../kube-apiserver.yaml .
此时,apiserver就会自动重建。
5、刷新.kube/config
$ cp /etc/kubernetes/admin.conf ~/.kube/
注意:这里生成的 admin.conf 文件,server填写的依然是master的内网IP,如果需要放在集群外的客户端上使用,将这个IP改为master的外网IP即可。
标签:kubernetes,访问,IP,apiserver,外网,yaml,公网,kubeadm,k8s From: https://www.cnblogs.com/Sleepy-Person/p/16962693.html