千家信息网

『高级篇』docker之kubernetes搭建集群添加认证授权(下)(39)

发表于:2025-02-19 作者:千家信息网编辑
千家信息网最后更新 2025年02月19日,原创文章,欢迎转载。转载请注明:转载自IT人故事会,谢谢!原文链接地址:『高级篇』docker之kubernetes搭建集群添加认证授权(下)(39)接上次的继续认证版的k8s搭建。kubectl准备
千家信息网最后更新 2025年02月19日『高级篇』docker之kubernetes搭建集群添加认证授权(下)(39)

原创文章,欢迎转载。转载请注明:转载自IT人故事会,谢谢!
原文链接地址:『高级篇』docker之kubernetes搭建集群添加认证授权(下)(39)

接上次的继续认证版的k8s搭建。

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.pemlsadmin.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/node 这个docker 容器运行时访问 etcd 使用证书
  • cni 配置文件中,cni 插件需要访问 etcd 使用证书
  • calicoctl 操作集群网络时访问 etcd 使用证书
  • calico/kube-controllers 同步集群网络策略时访问 etcd 使用证书
    #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/

确定下主节点的/etc/kubernetes/ca/ 和 102,103内的目录一致。

更新calico服务

cp ~/kubernetes-starter/target/all-node/kube-calico.service /lib/systemd/system/systemctl daemon-reloadservice 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工作节点)

这个配置是用来完成bootstrap token认证的,保存了像用户,token等重要的认证信息,这个文件可以借助kubectl命令生成:(也可以自己写配置)


很重要。
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.kubeconfigmkdir -p /var/lib/kubeletmkdir -p /etc/kubernetesmkdir -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-reloadservice 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

加入到主节点中。102

103请求加入,102已经加入

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-proxycp ~/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

新的配置没有设定api-server。不访问api-server,它是怎么知道每个服务的cluster ip和pod的endpoints的呢?这就是因为kubernetes在启动每个服务service的时候会以环境变量的方式把所有服务的ip,端口等信息注入进来。

创建kube-dns(主节点101)
kubectl create -f ~/kubernetes-starter/target/services/kube-dns.yaml#看看启动是否成功kubectl -n kube-system get pods

PS:终于,安全版的kubernetes集群部署完成了。 涉及到的细节也非常多,就这都对了两篇博文了,如果每个配置都详细解释估计得写本书了。从入门的角度了解认证和授权。
下面老铁们使用新集群先温习一下之前学习过的命令,然后再认识一些新的命令,新的参数,新的功能。

证书 节点 配置 认证 服务 集群 文件 准备 参数 客户 客户端 角色 生成 命令 用户 上下 上下文 方式 拷贝 位置 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 物流软件开发设计哪家不错 数据库如何分组统计 武昌订制软件开发团队 怎么从服务器断开连接 数据库查询姓名为两个字的学生 校园网络安全手绘画 仓库管理软件开发费用 列举常见的中文学位论文数据库 常用的解密算法网络安全技术 怎么判断服务器网速慢 数据库服务器一般用什么配置 django怎么连接数据库 微电子与软件开发 c 交换输入的两个数据库 软件开发人员述职模板下载 服务器主板cpu风扇转速高 思修网络安全对生活的影响 插件数据库 ecshop 医院网络安全的ppt模板 互联网科技公司多少钱一个月 网络安全人才基础技能 软件开发各阶段输出物 武昌订制软件开发团队 苹果旧手机连接服务器失败 sql2012数据库卸载方法 广州视频会议服务器安装 苏州软件开发培训机构 广西软件开发哪家好 黑板报 科技 互联网 计算机网络技术的背景及意义
0