李明
|
kubectl 准备证书 #kubectl证书放在这,由于kubectl相当于系统管理员,老铁使用admin命名mkdir -p /etc/kubernetes/ca/admin#准备admin证书配置 - kubectl只需客户端证书,因此证书请求中 hosts 字段可以为空cp ~/kubernetes-starter/target/ca/admin/admin-csr.json /etc/kubernetes/ca/admin/ cd /etc/kubernetes/ca/admin/#使用根证书(ca.pem)签发admin证书cfssl gencert \ -ca=/etc/kubernetes/ca/ca.pem \ -ca-key=/etc/kubernetes/ca/ca-key.pem \ -config=/etc/kubernetes/ca/ca-config.json \ -profile=kubernetes admin-csr.json | cfssljson -bare admin#老铁最终要的是admin-key.pem和admin.pemls admin.csr admin-csr.json admin-key.pem admin.pem 8.2 配置kubectl #指定apiserver的地址和证书位置(ip自行修改)kubectl config set-cluster kubernetes \ --certificate-authority=/etc/kubernetes/ca/ca.pem \ --embed-certs=true \ --server=https://192.168.68.101:6443#设置客户端认证参数,指定admin证书和秘钥kubectl config set-credentials admin \ --client-certificate=/etc/kubernetes/ca/admin/admin.pem \ --embed-certs=true \ --client-key=/etc/kubernetes/ca/admin/admin-key.pem#关联用户和集群kubectl config set-context kubernetes \ --cluster=kubernetes --user=admin#设置当前上下文kubectl config use-context kubernetes#设置结果就是一个配置文件,可以看看内容cat ~/.kube/config 验证master节点 #可以使用刚配置好的kubectl查看一下组件状态kubectl get componentstatus
calico-node(主节点生成证书,102,103通过scp拷贝过去) 准备证书 后续可以看到calico证书用在四个地方:
#calico证书放在这mkdir -p /etc/kubernetes/ca/calico#准备calico证书配置 - calico只需客户端证书,因此证书请求中 hosts 字段可以为空cp ~/kubernetes-starter/target/ca/calico/calico-csr.json /etc/kubernetes/ca/calico/ cd /etc/kubernetes/ca/calico/#使用根证书(ca.pem)签发calico证书cfssl gencert \ -ca=/etc/kubernetes/ca/ca.pem \ -ca-key=/etc/kubernetes/ca/ca-key.pem \ -config=/etc/kubernetes/ca/ca-config.json \ -profile=kubernetes calico-csr.json | cfssljson -bare calico#老铁最终要的是calico-key.pem和calico.pemls
拷贝主节点证书calico 由于calico服务是所有节点都需要启动的,需要把这几个文件拷贝到每台服务器上** 通过主节点拷贝到102,103两台机器上 #root的密码都是vagrantscp -r /etc/kubernetes/ca/ root@192.168.68.102:/etc/kubernetes/ca/ scp -r /etc/kubernetes/ca/ root@192.168.68.103:/etc/kubernetes/ca/
更新calico服务 cp ~/kubernetes-starter/target/all-node/kube-calico.service /lib/systemd/system/ systemctl daemon-reload service kube-calico start#验证calico(能看到其他节点的列表就对啦)calicoctl node status
kubelet 老铁这里让kubelet使用引导token的方式认证,所以认证方式跟之前的组件不同,它的证书不是手动生成,而是由工作节点TLS BootStrap 向api-server请求,由主节点的controller-manager 自动签发。 创建角色绑定(主节点) 引导token的方式要求客户端向api-server发起请求时告诉他你的用户名和token,并且这个用户是具有一个特定的角色:system:node-bootstrapper,所以需要先将 bootstrap token 文件中的 kubelet-bootstrap 用户赋予这个特定角色,然后 kubelet 才有权限发起创建认证请求。 在主节点执行下面命令 #可以通过下面命令查询clusterrole列表kubectl -n kube-system get clusterrole#可以回顾一下token文件的内容cat /etc/kubernetes/ca/kubernetes/token.csv#创建角色绑定(将用户kubelet-bootstrap与角色system:node-bootstrapper绑定)kubectl create clusterrolebinding kubelet-bootstrap \ --clusterrole=system:node-bootstrapper --user=kubelet-bootstrap
创建bootstrap.kubeconfig(102,103工作节点)
很重要。0b1bd95b94caa5534d1d4a7318d51b0e上边有说明这个咋来的 #设置集群参数(注意替换ip)kubectl config set-cluster kubernetes \ --certificate-authority=/etc/kubernetes/ca/ca.pem \ --embed-certs=true \ --server=https://192.168.68.101:6443 \ --kubeconfig=bootstrap.kubeconfig#设置客户端认证参数(注意替换token)kubectl config set-credentials kubelet-bootstrap \ --token=0b1bd95b94caa5534d1d4a7318d51b0e\ --kubeconfig=bootstrap.kubeconfig#设置上下文kubectl config set-context default \ --cluster=kubernetes \ --user=kubelet-bootstrap \ --kubeconfig=bootstrap.kubeconfig#选择上下文kubectl config use-context default --kubeconfig=bootstrap.kubeconfig mkdir -p /var/lib/kubelet mkdir -p /etc/kubernetes mkdir -p /etc/cni/net.d#将刚生成的文件移动到合适的位置mv bootstrap.kubeconfig /etc/kubernetes/ 准备cni配置(102,103工作节点) copy配置 cp ~/kubernetes-starter/target/worker-node/10-calico.conf /etc/cni/net.d/ kubelet服务 更新服务 cp ~/kubernetes-starter/target/worker-node/kubelet.service /lib/systemd/system/ systemctl daemon-reload service kubelet start ** 登录101主节点输入命令查看状态 kubectl get csr#启动kubelet之后到master节点允许worker加入(批准worker的tls证书请求)#--------*在主节点执行*---------kubectl get csr|grep 'Pending' | awk '{print $1}'| xargs kubectl certificate approve#-----------------------------#检查日志journalctl -f -u kubelet
kube-proxy(子节点102,103) 准备证书 #proxy证书放在这mkdir -p /etc/kubernetes/ca/kube-proxy#准备proxy证书配置 - proxy只需客户端证书,因此证书请求中 hosts 字段可以为空。#CN 指定该证书的 User 为 system:kube-proxy,预定义的 ClusterRoleBinding system:node-proxy 将User system:kube-proxy 与 Role system:node-proxier 绑定,授予了调用 kube-api-server proxy的相关 API 的权限cp ~/kubernetes-starter/target/ca/kube-proxy/kube-proxy-csr.json /etc/kubernetes/ca/kube-proxy/ cd /etc/kubernetes/ca/kube-proxy/#使用根证书(ca.pem)签发calico证书cfssl gencert \ -ca=/etc/kubernetes/ca/ca.pem \ -ca-key=/etc/kubernetes/ca/ca-key.pem \ -config=/etc/kubernetes/ca/ca-config.json \ -profile=kubernetes kube-proxy-csr.json | cfssljson -bare kube-proxy#老铁最终要的是kube-proxy-key.pem和kube-proxy.pemls
生成kube-proxy.kubeconfig配置 #设置集群参数(注意替换ip)kubectl config set-cluster kubernetes \ --certificate-authority=/etc/kubernetes/ca/ca.pem \ --embed-certs=true \ --server=https://192.168.68.101:6443 \ --kubeconfig=kube-proxy.kubeconfig#置客户端认证参数kubectl config set-credentials kube-proxy \ --client-certificate=/etc/kubernetes/ca/kube-proxy/kube-proxy.pem \ --client-key=/etc/kubernetes/ca/kube-proxy/kube-proxy-key.pem \ --embed-certs=true \ --kubeconfig=kube-proxy.kubeconfig#设置上下文参数kubectl config set-context default \ --cluster=kubernetes \ --user=kube-proxy \ --kubeconfig=kube-proxy.kubeconfig#选择上下文kubectl config use-context default --kubeconfig=kube-proxy.kubeconfig#移动到合适位置mv kube-proxy.kubeconfig /etc/kubernetes/kube-proxy.kubeconfig kube-proxy服务 启动服务 mkdir -p /var/lib/kube-proxy cp ~/kubernetes-starter/target/worker-node/kube-proxy.service /lib/systemd/system/ systemctl daemon-reload#安装依赖软件yum -y install conntrack#启动服务service kube-proxy start#查看日志journalctl -f -u kube-proxy
12. kube-dns kube-dns有些特别,因为它本身是运行在kubernetes集群中,以kubernetes应用的形式运行。所以它的认证授权方式跟之前的组件都不一样。它需要用到service account认证和RBAC授权。 service account认证: 每个service account都会自动生成自己的secret,用于包含一个ca,token和secret,用于跟api-server认证 RBAC授权: 权限、角色和角色绑定都是kubernetes自动创建好的。老铁只需要创建一个叫做kube-dns的 ServiceAccount即可,官方现有的配置已经把它包含进去了。 准备配置文件 在官方的基础上添加的变量,生成适合老铁我们集群的配置。直接copy就可以啦 cd ~/kubernetes-starter
创建kube-dns(主节点101) kubectl create -f ~/kubernetes-starter/target/services/kube-dns.yaml#看看启动是否成功kubectl -n kube-system get pods
PS:终于,安全版的kubernetes集群部署完成了。 涉及到的细节也非常多,就这都对了两篇博文了,如果每个配置都详细解释估计得写本书了。从入门的角度了解认证和授权。下面老铁们使用新集群先温习一下之前学习过的命令,然后再认识一些新的命令,新的参数,新的功能。
|
2019-02-28 09:26:54