二进制安装kubernetes v1.11.2 (第三章 二进制文件下载和kubectl部署)

继续部署。

三、kubernetes 二进制文件下载

3.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

 

3.2 部署kubectl

kubectl是kubernetes集群的命令行管理工具。默认从~/.kube/config文件读取kube-apiserver地址、证书、用户名等信息,如果没有配置,执行命令的时候可能会出错

解压二进制文件包 kubernetes-server-linux-amd64.tar.gz

3.3 分发到所有使用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

3.4 创建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

3.5 生成证书和私钥

[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*

3.6 创建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文件中(不加时,写入的是证书文件路径)

3.7 分发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

 

posted on 2018-10-24 12:01  冰冰爱学习  阅读(2639)  评论(0编辑  收藏  举报

导航