1. 创建配置文件

  1. cat > /opt/kubernetes/cfg/kube-apiserver.conf << EOF
  2. KUBE_APISERVER_OPTS="--logtostderr=false \\
  3. --v=2 \\
  4. --log-dir=/opt/kubernetes/logs \\
  5. --etcd-servers=https://192.168.31.71:2379,https://192.168.31.72:2379,https://192.168.31.73:2379 \\
  6. --bind-address=192.168.31.71 \\
  7. --secure-port=6443 \\
  8. --advertise-address=192.168.31.71 \\
  9. --allow-privileged=true \\
  10. --service-cluster-ip-range=10.0.0.0/24 \\
  11. --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,ResourceQuota,NodeRestriction \\
  12. --authorization-mode=RBAC,Node \\
  13. --enable-bootstrap-token-auth=true \\
  14. --token-auth-file=/opt/kubernetes/cfg/token.csv \\
  15. --service-node-port-range=30000-32767 \\
  16. --kubelet-client-certificate=/opt/kubernetes/ssl/server.pem \\
  17. --kubelet-client-key=/opt/kubernetes/ssl/server-key.pem \\
  18. --tls-cert-file=/opt/kubernetes/ssl/server.pem \\
  19. --tls-private-key-file=/opt/kubernetes/ssl/server-key.pem \\
  20. --client-ca-file=/opt/kubernetes/ssl/ca.pem \\
  21. --service-account-key-file=/opt/kubernetes/ssl/ca-key.pem \\
  22. --etcd-cafile=/opt/etcd/ssl/ca.pem \\
  23. --etcd-certfile=/opt/etcd/ssl/server.pem \\
  24. --etcd-keyfile=/opt/etcd/ssl/server-key.pem \\
  25. --audit-log-maxage=30 \\
  26. --audit-log-maxbackup=3 \\
  27. --audit-log-maxsize=100 \\
  28. --audit-log-path=/opt/kubernetes/logs/k8s-audit.log"
  29. EOF

注:上面两个\ \ 第一个是转义符,第二个是换行符,使用转义符是为了使用EOF保留换行符。

  • –logtostderr:启用日志
  • —v:日志等级
  • –log-dir:日志目录
  • –etcd-servers:etcd集群地址
  • –bind-address:监听地址
  • –secure-port:https安全端口
  • –advertise-address:集群通告地址
  • –allow-privileged:启用授权
  • –service-cluster-ip-range:Service虚拟IP地址段
  • –enable-admission-plugins:准入控制模块
  • –authorization-mode:认证授权,启用RBAC授权和节点自管理
  • –enable-bootstrap-token-auth:启用TLS bootstrap机制
  • –token-auth-file:bootstrap token文件
  • –service-node-port-range:Service nodeport类型默认分配端口范围
  • –kubelet-client-xxx:apiserver访问kubelet客户端证书
  • –tls-xxx-file:apiserver https证书
  • –etcd-xxxfile:连接Etcd集群证书
  • –audit-log-xxx:审计日志

    2. 拷贝刚才生成的证书

    把刚才生成的证书拷贝到配置文件中的路径:
    1. cp ~/TLS/k8s/ca*pem ~/TLS/k8s/server*pem /opt/kubernetes/ssl/

    3. 启用 TLS Bootstrapping 机制

    TLS Bootstraping:Master apiserver启用TLS认证后,Node节点kubelet和kube-proxy要与kube-apiserver进行通信,必须使用CA签发的有效证书才可以,当Node节点很多时,这种客户端证书颁发需要大量工作,同样也会增加集群扩展复杂度。为了简化流程,Kubernetes引入了TLS bootstraping机制来自动颁发客户端证书,kubelet会以一个低权限用户自动向apiserver申请证书,kubelet的证书由apiserver动态签署。所以强烈建议在Node上使用这种方式,目前主要用于kubelet,kube-proxy还是由我们统一颁发一个证书。
    TLS bootstraping 工作流程:
    4.4 部署kube-apiserver - 图1
    创建上述配置文件中token文件:
    1. cat > /opt/kubernetes/cfg/token.csv << EOF
    2. c47ffb939f5ca36231d9e3121a252940,kubelet-bootstrap,10001,"system:node-bootstrapper"
    3. EOF
    格式:token,用户名,UID,用户组
    token也可自行生成替换:
    1. head -c 16 /dev/urandom | od -An -t x | tr -d ' '

    4. systemd管理apiserver

    1. cat > /usr/lib/systemd/system/kube-apiserver.service << EOF
    2. [Unit]
    3. Description=Kubernetes API Server
    4. Documentation=https://github.com/kubernetes/kubernetes
    5. [Service]
    6. EnvironmentFile=/opt/kubernetes/cfg/kube-apiserver.conf
    7. ExecStart=/opt/kubernetes/bin/kube-apiserver \$KUBE_APISERVER_OPTS
    8. Restart=on-failure
    9. [Install]
    10. WantedBy=multi-user.target
    11. EOF

    5. 启动并设置开机启动

    1. systemctl daemon-reload
    2. systemctl start kube-apiserver
    3. systemctl enable kube-apiserver

    6. 授权kubelet-bootstrap用户允许请求证书

    1. kubectl create clusterrolebinding kubelet-bootstrap \
    2. --clusterrole=system:node-bootstrapper \
    3. --user=kubelet-bootstrap