[TOC]node
到这里,ETCD集群、kube-nginx + keepalived、kube-apiserver都已经安装完成。nginx
此时能够测试一下前面安装的是否正常json
kubectl与apiserver https通讯,apiserver对提供的证书进行认证和受权。kubectl做为集群的管理工具,须要被授予最高权限,这里建立具备最高权限的admin证书api
建立证书签名请求ssh
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": "4Paradigm" } ] } EOF ################### ● O 为system:masters,kube-apiserver收到该证书后将请求的Group设置为system:masters ● 预约的ClusterRoleBinding cluster-admin将Group system:masters与Role cluster-admin绑定,该Role授予API的权限 ● 该证书只有被kubectl当作client证书使用,因此hosts字段为空
生成证书和私钥tcp
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*
建立kubeconfig文件工具
kubeconfig为kubectl的配置文件,包含访问apiserver的全部信息,如apiserver地址、CA证书和自身使用的证书测试
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=${KUBE_APISERVER} \ --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、--client-key 刚生成的admin证书和私钥,链接kube-apiserver时使用 --embed-certs=true 将ca.pem和admin.pem证书嵌入到生成的kubectl.kubeconfig文件中 (若是不加入,写入的是证书文件路径,后续拷贝kubeconfig到其它机器时,还须要单独拷贝证书)
分发到全部使用kubectl命令的节点spa
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 #保存文件名为~/.kube/config
[root@node01 work]# kubectl cluster-info Kubernetes master is running at https://vip.k8s.com:8443 To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'. [root@node01 work]# kubectl get all --all-namespaces NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE default service/kubernetes ClusterIP 10.254.0.1 <none> 443/TCP 98 [root@node01 work]# kubectl get cs NAME STATUS MESSAGE ERROR scheduler Unhealthy Get http://127.0.0.1:10251/healthz: dial tcp 127.0.0.1:10251: connect: connection refused controller-manager Unhealthy Get http://127.0.0.1:10252/healthz: dial tcp 127.0.0.1:10252: connect: connection refused etcd-0 Healthy {"health":"true"} etcd-2 Healthy {"health":"true"} etcd-1 Healthy {"health":"true"}
若是提示有报错,请检查~/.kube/config以及配置证书是否有问题debug
在执行kubectl命令时,apiserver会将请求转发到kubelet的https端口。这里定义的RBAC规则,受权apiserver使用的证书(kubernetes.pem)用户名(CN:kubernetes)访问kubelet API的权限
kubectl create clusterrolebinding kube-apiserver:kubelet-apis --clusterrole=system:kubelet-api-admin --user kubernetes
安装到这里,上面的操做显示结果相同的话,表示以前的操做都正常,能够继续往下
若是不同,仔细对照每一步,若是还不行,能够联系博主。最下方有个人联系方式。