创建客户端CA证书
kube-controller-manager,kube-scheduler,kubelet和kube-proxy服务作为客户的连接kube-apiserver时,需要CA证书的认证才能正确连接。为了方便统一创建一个客户端CA证书,使得以上服务可以正确访问kube-apiserver。
cd /etc/kubernetes/pki
openssl genrsa -out client.key 2048
Generating RSA private key, 2048 bit long modulus
.................+++
............................................+++
e is 65537 (0x10001)
openssl req -new -key client.key -subj "/CN=admin" -out client.csr
openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt -days 36500
Signature ok
subject=/CN=admin
Getting CA Private Key
###
#-subj "/CN=admin"参数用于标识连接kube-apiserver的客户端用户的名称
创建客户端连接kube-apiserver服务所需要的kubeconfig配置文件
为kube-controller-manager、kube-scheduler、kubelet、kube-proxy和kubectl服务统一创建一个kubeconfig文件,作为连接kube-apiserver服务的配置文件。
在kubeconfig文件中,主要设置访问kube-apiserver的URL地址及所需要的CA证书等相关参数
vim /etc/kubernetes/kubeconfig
apiVersion: v1
kind: Config
clusters:
- name: default
cluster:
server: https://192.168.88.100:9443
certificate-authority: /etc/kubernetes/pki/ca.crt
users:
- name: admin
user:
client-certificate: /etc/kubernetes/pki/client.crt
client-key: /etc/kubernetes/pki/client.key
contexts:
- context:
cluster: default
user: admin
name: default
current-context: default
###
# server URL 地址:配置为负载均衡器(HAProxy)使用的虚拟IP地址和HAProxy监听的端口号
# certificate-authority:CA根证书的路径
# client-certificate:客户端证书文件(client.crt)的路径
# client-key:客户端私钥文件(client.key)的路径
# users中的user.name以及context中的context.user:连接API Server 的用户名,设置为与客户端证书中的“/CN”名称保持一致,如“admin”
部署kube-controller-manager服务
创建service文件
vim /usr/lib/systemd/system/kube-controller-manager.service
[Unit]
Description=Kubernetes Controller Manager
Documentation=https://github.com/kubernetes/kubernetes
[Service]
EnvironmentFile=/etc/kubernetes/controller-manager
ExecStart=/usr/bin/kube-controller-manager $KUBE_CONTROLLER_MANAGER_ARGS
Restart=always
[Install]
WantedBy=multi-user.target
创建kube-controller-manager运行时所需的环境文件
vim /etc/kubernetes/controller-manager
KUBE_CONTROLLER_MANAGER_ARGS="--kubeconfig=/etc/kubernetes/kubeconfig \
--leader-elect=true \
--service-cluster-ip-range=10.245.0.0/16 \
--cluster-cidr=10.244.0.0/16 \
--allocate-node-cidrs=true \
--service-account-private-key-file=/etc/kubernetes/pki/apiserver.key \
--root-ca-file=/etc/kubernetes/pki/ca.crt"
###
# kubeconfig:与APIServer连接的相关配置
# leader-elect:启用选举机制,在有3个节点的情况下应该设置为true
# service-cluster-ip-range:Service的虚拟IP地址范围,以CIDR格式表示,与kube-apiserver服务中的配置保持一致
# service-account-private-key-file:为ServiceAccount自动颁发token使用的私钥文件路径
# root-ca-file:CA根证书的路径
开启服务
systemctl enable kube-controller-manager --now
scp master1:/etc/kubernetes/kubeconfig /etc/kubernetes/kubeconfig
scp master1:/usr/lib/systemd/system/kube-controller-manager.service /usr/lib/systemd/system/kube-controller-manager.service
scp master1:/etc/kubernetes/controller-manager /etc/kubernetes/controller-manager
scp master1:/etc/kubernetes/pki/client.* /etc/kubernetes/pki/
systemctl enable kube-controller-manager --now
#kube-controller-manager运行状态,会看到一些error,这是因为kube-apiserver配置的地址是192.168.88.100:6443,这是一个高可用集群的虚拟地址,但是现在还没有进行配置,因此kube-controller-manager会报一些访问失败的错误
systemctl status kube-controller-manager.service -l
● kube-controller-manager.service - Kubernetes Controller Manager
Loaded: loaded (/usr/lib/systemd/system/kube-controller-manager.service; enabled; vendor preset: disabled)
Active: active (running) since Tue 2025-04-08 18:03:04 CST; 7h left
Docs: https://github.com/kubernetes/kubernetes
Main PID: 2465 (kube-controller)
Tasks: 5 (limit: 11218)
Memory: 18.0M
CGroup: /system.slice/kube-controller-manager.service
└─2465 /usr/bin/kube-controller-manager --kubeconfig=/etc/kubernetes/kubeconfig --leader-elect=true --service-cluster-ip-range=10.245.0.0/16 --c>
4月 08 10:19:38 master1 kube-controller-manager[2465]: E0408 10:19:38.595169 2465 leaderelection.go:436] error retrieving resource lock kube-system/kube>
4月 08 10:19:42 master1 kube-controller-manager[2465]: E0408 10:19:42.947582 2465 leaderelection.go:436] error retrieving resource lock kube-system/kube>
4月 08 10:19:46 master1 kube-controller-manager[2465]: E0408 10:19:46.019711 2465 leaderelection.go:436] error retrieving resource lock kube-system/kube>
4月 08 10:19:53 master1 kube-controller-manager[2465]: E0408 10:19:53.442951 2465 leaderelection.go:436] error retrieving resource lock kube-system/kube>
4月 08 10:19:56 master1 kube-controller-manager[2465]: E0408 10:19:56.519048 2465 leaderelection.go:436] error retrieving resource lock kube-system/kube>
4月 08 10:19:59 master1 kube-controller-manager[2465]: E0408 10:19:59.588051 2465 leaderelection.go:436] error retrieving resource lock kube-system/kube>
4月 08 10:20:05 master1 kube-controller-manager[2465]: E0408 10:20:05.733890 2465 leaderelection.go:436] error retrieving resource lock kube-system/kube>
4月 08 10:20:08 master1 kube-controller-manager[2465]: E0408 10:20:08.805862 2465 leaderelection.go:436] error retrieving resource lock kube-system/kube>
4月 08 10:20:15 master1 kube-controller-manager[2465]: E0408 10:20:15.973150 2465 leaderelection.go:436] error retrieving resource lock kube-system/kube>
4月 08 10:20:22 master1 kube-controller-manager[2465]: E0408 10:20:22.113854 2465 leaderelection.go:436] error retrieving resource lock kube-system/kube>
- clusters(集群信息)
定义了要连接的 Kubernetes 集群的相关信息,包括集群的名称、API 服务器的地址、证书颁发机构(CA)的证书数据等。示例如下:
clusters:
- name: my - cluster
cluster:
certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUR......
server: https://192.168.88.100:6443
name:集群的名称,用于在配置文件中唯一标识该集群。
certificate - authority - data:CA 证书的 Base64 编码数据,用于验证 API 服务器的证书。
server:API 服务器的地址,客户端通过该地址与集群进行通信。
- users(用户信息)
定义了访问集群的用户的认证信息,如客户端证书、私钥、令牌等。示例如下:
users:
- name: my - user
user:
client - certificate - data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUR......
client - key - data: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlF......
name:用户的名称,用于在配置文件中唯一标识该用户。
client - certificate - data:客户端证书的 Base64 编码数据。
client - key - data:客户端私钥的 Base64 编码数据。
- contexts(上下文信息)
定义了集群、用户和命名空间的组合,一个上下文表示一个特定的访问环境。示例如下:
contexts:
- name: my - context
context:
cluster: my - cluster
user: my - user
namespace: default
name:上下文的名称,用于在配置文件中唯一标识该上下文。
cluster:指定要使用的集群名称。
user:指定要使用的用户名称。
namespace:指定要使用的命名空间。
- current - context(当前上下文)
指定当前使用的上下文,kubectl 等客户端工具会根据该上下文来确定要连接的集群、用户和命名空间。示例如下:
current - context: my - context
作用
多集群管理:通过 kubeconfig 文件,可以配置多个集群、用户和上下文信息,方便用户在不同的 Kubernetes 集群之间进行切换和管理。
安全认证:包含了访问集群所需的认证信息,确保只有授权的用户才能访问集群。
环境隔离:通过不同的上下文,可以在同一个客户端上针对不同的命名空间或集群进行操作,实现环境的隔离和管理。
使用方法
指定 kubeconfig 文件
在使用 kubectl 时,可以通过 --kubeconfig 参数指定要使用的 kubeconfig 文件路径。示例如下:bash kubectl --kubeconfig=/path/to/kubeconfig get pods
如果不指定 --kubeconfig 参数,kubectl 会默认使用 $HOME/.kube/config 文件。
切换上下文
使用 kubectl config use - context 命令可以切换当前使用的上下文。示例如下:bash kubectl config use - context my - context
查看配置信息
使用 kubectl config view 命令可以查看当前 kubeconfig 文件的详细信息。示例如下:bash kubectl config view
{/collapse-item}
评论 (0)