1. 程式人生 > >二進制安裝kubernetes v1.11.2 (第三章 二進制文件下載和kubectl部署)

二進制安裝kubernetes v1.11.2 (第三章 二進制文件下載和kubectl部署)

github size date 令行 uber jin config文件 建議 根證書

繼續部署。

四、kubernetes 二進制文件下載

下載頁面:https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.11.md 4.1 下載鏈接:wget https://dl.k8s.io/v1.11.2/kubernetes-server-linux-amd64.tar.gz
[k8s@k8s-m1 ~]$ mkdir -p /home/k8s/k8s/v1.11.2/server && cd /home/k8s/k8s/v1.11.2/server 
[k8s@k8s-m1 server] wget https://dl.k8s.io/v1.11.2/kubernetes-server-linux-amd64.tar.gz
[k8s@k8s-m1 server] tar zxvf kubernetes-server-linux-amd64.tar.gz

五、部署kubectl

kubectl是kubernetes集群的命令行管理工具。默認從~/.kube/config文件讀取kube-apiserver地址、證書、用戶名等信息,如果沒有配置,執行命令的時候可能會出錯

解壓二進制文件包 kubernetes-server-linux-amd64.tar.gz

5.1 分發到所有使用kubectl的master節點

[k8s@k8s-m1 server]$ source /opt/k8s/bin/environment.sh
[k8s@k8s-m1 server]$ for master_ip in ${MASTER_IPS[@]}
  do
    echo ">>> ${master_ip}"
    scp ~/k8s/v1.11.2/server/kubernetes/server/bin/kubectl k8s@${master_ip}:/opt/k8s/bin/
    ssh k8s@${master_ip} "chmod +x /opt/k8s/bin/*"
done

5.2 創建admin證書和私鑰

kubectl與apiserver https安全端口通信,apiserver對提供的證書進行認證和授權

kubectl作為集群的管理工具,需要被授予最高權限。這裏創建具有最高權限的admin證書。

創建admin證書簽名請求文件

cat > admin-csr.json <<EOF
{
  "CN": "admin",
  "hosts": [],
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "ST": "BeiJing",
      "L": "BeiJing",
      "O": "system:masters",
      "OU": "4Paradigm"
    }
  ]
}
EOF
  • 後續kube-apiserver使用RBAC對客戶端(如kubelet、kube-proxy、pod)進行授權
  • O為system:masters,kube-apiserver收到該證書後將請求的Group設置為system:masters。kubelet使用該證書訪問kube-apiserver時,由於證書被CA簽名,所以認證通過,同時由於用戶組被授權為system:masters,所以授予訪問所有API的權限;
  • kube-apiserver預定義了一些RBAC使用的ClusterRoleBinding,如 cluster-admin將Group system:masters與 Role cluster-admin綁定,該Role授予所有API的權限;
  • 該證書只會被kubectl當做client證書使用,所以hosts字段為空;

註意:這個admin證書是將來生成管理員用的kube config配置文件用的,現在我們一般建議使用RBAC來對kubernetes進行角色權限控制,kubernetes將證書中的CN字段作為User,O字段作為Group

在搭建完 kubernetes 集群後,我們可以通過命令: kubectl get clusterrolebinding cluster-admin -o yaml ,查看到 clusterrolebinding cluster-admin 的 subjects 的 kind 是 Group,name 是 system:masters。 roleRef 對象是 ClusterRole cluster-admin。 意思是凡是 system:masters Group 的 user 或者 serviceAccount 都擁有 cluster-admin 的角色。 因此我們在使用 kubectl 命令時候,才擁有整個集群的管理權限。可以使用 kubectl get clusterrolebinding cluster-admin -o yaml 來查看。

$ kubectl get clusterrolebinding cluster-admin -o yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  annotations:
    rbac.authorization.kubernetes.io/autoupdate: "true"
  creationTimestamp: 2017-04-11T11:20:42Z
  labels:
    kubernetes.io/bootstrapping: rbac-defaults
  name: cluster-admin
  resourceVersion: "52"
  selfLink: /apis/rbac.authorization.k8s.io/v1/clusterrolebindings/cluster-admin
  uid: e61b97b2-1ea8-11e7-8cd7-f4e9d49f8ed0
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- apiGroup: rbac.authorization.k8s.io
  kind: Group
  name: system:masters

5.3 生成證書和私鑰

[k8s@k8s-m1 cert]$ cfssl gencert -ca=/etc/kubernetes/cert/ca.pem   -ca-key=/etc/kubernetes/cert/ca-key.pem   -config=/etc/kubernetes/cert/ca-config.json   -profile=kubernetes admin-csr.json | cfssljson -bare admin
[k8s@k8s-m1 cert]$ ls admin*

5.4 創建kubeconfig文件

kubeconfig為kubectl的配置文件,包含訪問apiserver的所有信息,如apiserver的地址、CA證書和自身使用的證書

source /opt/k8s/bin/environment.sh
# 設置集群參數
kubectl config set-cluster kubernetes   --certificate-authority=/etc/kubernetes/cert/ca.pem   --embed-certs=true   --server=${KUBE_APISERVER}   --kubeconfig=kubectl.kubeconfig

# 設置客戶端認證參數
kubectl config set-credentials admin   --client-certificate=admin.pem   --client-key=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、--client-key 剛生成的admin證書和私鑰,鏈接kube-apiserver時使用
  • --embed-certs=true 將ca.pem和admin.pem證書內容嵌入到生成kubectl.kubeconfig文件中(不加時,寫入的是證書文件路徑)

5.5 分發kubeconfig文件

分發到所有使用kubectl的節點,保存到用戶的~/.kube/config

source /opt/k8s/bin/environment.sh
for master_ip in ${MASTER_IPS[@]}
  do
    echo ">>> ${master_ip}"
    ssh k8s@${master_ip} "mkdir -p ~/.kube"
    scp kubectl.kubeconfig k8s@${master_ip}:~/.kube/config
    ssh root@${master_ip} "mkdir -p ~/.kube"
    scp kubectl.kubeconfig root@${master_ip}:~/.kube/config
done

二進制安裝kubernetes v1.11.2 (第三章 二進制文件下載和kubectl部署)