03.部署 kubectl 命令行工具

    kubectl 默认从 文件读取 kube-apiserver 地址和认证信息,如果没有配置,执行 kubectl 命令时可能会出错:

    注意:

    1. 如果没有特殊指明,本文档的所有操作均在 zhangjun-k8s01 节点上执行,然后远程分发文件和执行命令;
    2. 本文档只需要部署一次,生成的 kubeconfig 文件是通用的,可以拷贝到需要执行 kubectl 命令的机器,重命名为 ~/.kube/config
    1. cd /opt/k8s/work
    2. wget https://dl.k8s.io/v1.14.2/kubernetes-client-linux-amd64.tar.gz
    3. tar -xzvf kubernetes-client-linux-amd64.tar.gz

    分发到所有使用 kubectl 的节点:

    kubectl 与 apiserver https 安全端口通信,apiserver 对提供的证书进行认证和授权。

    创建证书签名请求:

    1. cd /opt/k8s/work
    2. cat > admin-csr.json <<EOF
    3. {
    4. "CN": "admin",
    5. "hosts": [],
    6. "key": {
    7. "algo": "rsa",
    8. "size": 2048
    9. },
    10. "names": [
    11. "C": "CN",
    12. "ST": "BeiJing",
    13. "L": "BeiJing",
    14. "O": "system:masters",
    15. }
    16. ]
    17. }
    18. EOF
    • O 为 system:masters,kube-apiserver 收到该证书后将请求的 Group 设置为 system:masters;
    • 预定义的 ClusterRoleBinding cluster-admin 将 Group system:masters 与 Role cluster-admin 绑定,该 Role 授予所有 API的权限;
    • 该证书只会被 kubectl 当做 client 证书使用,所以 hosts 字段为空;

    生成证书和私钥:

    1. cd /opt/k8s/work
    2. source /opt/k8s/bin/environment.sh
    3. # 设置集群参数
    4. kubectl config set-cluster kubernetes \
    5. --certificate-authority=/opt/k8s/work/ca.pem \
    6. --embed-certs=true \
    7. --kubeconfig=kubectl.kubeconfig
    8. # 设置客户端认证参数
    9. --client-certificate=/opt/k8s/work/admin.pem \
    10. --client-key=/opt/k8s/work/admin-key.pem \
    11. --embed-certs=true \
    12. --kubeconfig=kubectl.kubeconfig
    13. # 设置上下文参数
    14. kubectl config set-context kubernetes \
    15. --cluster=kubernetes \
    16. --user=admin \
    17. --kubeconfig=kubectl.kubeconfig
    18. # 设置默认上下文
    19. kubectl config use-context kubernetes --kubeconfig=kubectl.kubeconfig
    • --certificate-authority:验证 kube-apiserver 证书的根证书;
    • --client-certificate--client-key:刚生成的 admin 证书和私钥,连接 kube-apiserver 时使用;

    分发到所有使用 kubectl 命令的节点:

    • 保存的文件名为 ;