如何给 Kubernetes Apiserver 新增访问入口

2023年 1月 4日 28.3k 0

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. 参考

  • https://kubesphereio.com/post/add-public-ip-to-kubernetes-apiserver-operation-guide/

相关文章

KubeSphere 部署向量数据库 Milvus 实战指南
探索 Kubernetes 持久化存储之 Longhorn 初窥门径
征服 Docker 镜像访问限制!KubeSphere v3.4.1 成功部署全攻略
那些年在 Terraform 上吃到的糖和踩过的坑
无需 Kubernetes 测试 Kubernetes 网络实现
Kubernetes v1.31 中的移除和主要变更

发布评论