我们通过 kubectl 命令行连接 k8s apiserver 时需要依赖 kubeconfig 文件。
kubeconfig 文件通常包含了 context(上下文)列表,每个 context 又会引用 clusteruser,最后通过 current-context 指定当前 kubeconfig 使用哪个 context。

kubeconfig 文件的默认存放位置为 ~/.kube/config,文件结构示例如下:

apiVersion: v1
kind: Config
clusters:
- name: "k8s-180"
  cluster:
    # 忽略证书
    insecure-skip-tls-verify: true
    server: https://192.168.1.180:6443
    #certificate-authority-data: "LS0tLS1CRUdJ......ZJQ0FURS0tLS"

users:
- name: "k8s-admin"
  user:
    client-certificate-data: "LS0tLS1CRUdJTi......VEUtLS0tLQo="
    client-key-data: "LS0tLS1CRUdJTi......qTVAKdWRiQXZmM1JiajRuSmxZ\
      b3V3NEJ5YkppNVFLRj......IUXpSb0pvaTNFMC9oc2x\
      QUxnPT0KLS0tLS1......SVElGSUNBVEUtLS0tLQo="
    #token: "kubeconfig-user-rmz6q.c-97hgz:29z89ns8whhgq8......gl57cfvwlv"

contexts:
- name: "k8s-180"
  context:
    user: "k8s-admin"
    cluster: "k8s-180"

current-context: "k8s-180"

1、其中 client-certificate-data 的内容为文件 kube-node.pemnode-node1.pem 的内容,获取文件内容的方法可以使用命令 base64 /etc/kubernetes/ssl/kube-node.pemcat /etc/kubernetes/ssl/node-node1.pem | base64 -w 0,内容可以单行或者使用\进行换行。

2、其中 client-key-data 的内容为文件 kube-node-key.pemnode-node1-key.pem 的内容,获取文件内容的方法可以使用命令 base64 /etc/kubernetes/ssl/kube-node-key.pemcat /etc/kubernetes/ssl/node-node1-key.pem | base64 -w 0,内容可以单行或者使用\进行换行。

3、另外,如果 user 中使用 token,则可以不配置 client-certificate-dataclient-key-data

4、以上配置文件中的证书通过字符串的方式配置在 config 文件中,如果不想写具体的字符串,本地有证书文件,则可以通过 client-certificateclient-key 来设置证书路径的方式使用,如下某集群示例所示:

apiVersion: v1
kind: Config
clusters:
- cluster:
    api-version: v1
    certificate-authority: /etc/kubernetes/ssl/kube-ca.pem
    server: "https://127.0.0.1:6443"
  name: "local"
contexts:
- context:
    cluster: "local"
    user: "kube-controller-manager-local"
  name: "local"
current-context: "local"
users:
- name: "kube-controller-manager-local"
  user:
    client-certificate: /etc/kubernetes/ssl/kube-controller-manager.pem
    client-key: /etc/kubernetes/ssl/kube-controller-manager-key.pem

该示例文件为 RKE 创建的 K8s 集群的 config 配置文件 /etc/kubernetes/ssl/kubecfg-kube-controller-manager.yaml 的内容

最后实操 kubectl 命令验证配置:

[root@k8s-node1 ~]# kubectl config current-context
k8s-180
[root@k8s-node1 ~]# kubectl get nodes
NAME            STATUS   ROLES                      AGE    VERSION
k8s-node1   Ready    controlplane,etcd,worker   448d   v1.21.5
k8s-node2   Ready    controlplane,etcd,worker   448d   v1.21.5
k8s-node3   Ready    controlplane,etcd,worker   448d   v1.21.5
k8s-node4   Ready    worker                     413d   v1.21.5
k8s-node5   Ready    worker                     413d   v1.21.5
k8s-node6   Ready    worker                     413d   v1.21.5

(END)

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐