- 若是没有特殊指明,全部操做均在 zhaoyixin-k8s-01 节点上执行。
- 本节操做只须要部署一次,生成的 kubeconfig 文件是通用的,能够拷贝到须要执行 kubectl 命令的机器的
~/.kube/config
位置。
cd /opt/k8s/work wget https://dl.k8s.io/v1.16.6/kubernetes-client-linux-amd64.tar.gz tar -xzvf kubernetes-client-linux-amd64.tar.gz
分发到全部使用 kubectl 工具的节点:node
cd /opt/k8s/work source /opt/k8s/bin/environment.sh for node_ip in ${NODE_IPS[@]} do echo ">>> ${node_ip}" scp kubernetes/client/bin/kubectl root@${node_ip}:/opt/k8s/bin/ ssh root@${node_ip} "chmod +x /opt/k8s/bin/*" done
kubectl 使用 https 协议与 kube-apiserver 进行安全通讯,kube-apiserver 对 kubectl 请求包含的证书进行认证和受权。linux
kubectl 后续用于集群管理,因此这里建立具备最高权限的 admin 证书。git
建立证书签名请求文件:github
cd /opt/k8s/work cat > admin-csr.json <<EOF { "CN": "admin", "hosts": [], "key": { "algo": "rsa", "size": 2048 }, "names": [ { "C": "CN", "ST": "BeiJing", "L": "BeiJing", "O": "system:masters", "OU": "zhaoyixin" } ] } EOF
O: system:masters
:kube-apiserver 收到使用该证书的客户端请求后,为请求添加组(Group)认证标识 system:masters
;cluster-admin
将 Group system:masters
与 Role cluster-admin
绑定,该 Role 授予操做集群所需的最高权限;hosts
字段为空。生成证书和私钥:json
cd /opt/k8s/work cfssl gencert -ca=/opt/k8s/work/ca.pem \ -ca-key=/opt/k8s/work/ca-key.pem \ -config=/opt/k8s/work/ca-config.json \ -profile=kubernetes admin-csr.json | cfssljson -bare admin ls admin*
kubectl 使用 kubeconfig 文件访问 apiserver,该文件包含 kube-apiserver 的地址和认证信息(CA 证书和客户端证书):api
cd /opt/k8s/work source /opt/k8s/bin/environment.sh # 设置集群参数 kubectl config set-cluster kubernetes \ --certificate-authority=/opt/k8s/work/ca.pem \ --embed-certs=true \ --server=https://${NODE_IPS[0]}:6443 \ --kubeconfig=kubectl.kubeconfig # 设置客户端认证参数 kubectl config set-credentials admin \ --client-certificate=/opt/k8s/work/admin.pem \ --client-key=/opt/k8s/work/admin-key.pem \ --embed-certs=true \ --kubeconfig=kubectl.kubeconfig # 设置上下文参数 kubectl config set-context kubernetes \ --cluster=kubernetes \ --user=admin \ --kubeconfig=kubectl.kubeconfig # 设置默认上下文 kubectl config use-context kubernetes --kubeconfig=kubectl.kubeconfig
--certificate-authority
:验证 kube-apiserver 证书的根证书;--client-certificate
:刚生成的 admin 证书,与 kube-apiserver https 通讯时使用;--client-key
: 刚生成的 admin 私钥,与 kube-apiserver https 通讯时使用;--embed-certs=true
: 将 ca.pem
和 admin.pem
证书内容嵌入到生成的 kubectl.kubeconfig 文件中(不然,写入的是证书文件路径,后续拷贝 kubeconfig 到其它机器时,还须要单独拷贝证书文件);server
:指定 kube-apiserver 的地址,这里指向第一个节点上的服务。分发到全部使用 kubectl 命令的节点:安全
cd /opt/k8s/work source /opt/k8s/bin/environment.sh for node_ip in ${NODE_IPS[@]} do echo ">>> ${node_ip}" ssh root@${node_ip} "mkdir -p ~/.kube" scp kubectl.kubeconfig root@${node_ip}:~/.kube/config done