为APIServer签发证书
在部署master节点之前,我们需要先未master节点上的APIServer签发证书,实现https访问APIServer
vim /k8sfiles/TLS/k8s/server-csr.json
"172.16.23.31",
"172.16.23.32",
"172.16.23.41",
"172.16.23.42",
"172.16.23.43",
"172.16.23.51",
"172.16.23.52",
"172.16.23.53",
"172.16.23.61",
"172.16.23.62",
"172.16.23.63"
# 执行脚本签发证书
./generater_k8s_cert.sh
部署master服务
- 文件准备
tar xvf k8s-master.tar.gz
sudo mv kube-apiserver.service kube-controller-manager.service kube-scheduler.service /usr/lib/systemd/system/
sudo mv kubernetes /opt/
cp ../TLSK8s/{ca*pem,server.pem,server-key.pem} /opt/kubernetes/ssl -rvf
- 修改apiserver的配置文件
# sudo vim /opt/kubernetes/cfg/kube-apiserver.conf
# 日志相关
KUBE_APISERVER_OPTS="--logtostderr=false \ # 是否在终端打印日志
--v=2 \ # 日志的级别(越高信息越全)
--log-dir=/opt/kubernetes/logs \ # 日志保存的位置
# service相关
--etcd-servers=https://172.16.23.51:2379,https://172.16.23.61:2379,https://172.16.23.62:2379 \ # etcd的访问地址
--bind-address=172.16.23.51 \ # apiserver绑定的地址,当前master节点监听的IP
--secure-port=6443 \ # 当前master节点监听的端口
--advertise-address=172.16.23.51 \ # apiserver的通告地址(一般和绑定的地址一样)
--allow-privileged=true \ # 是否使用超级管理员权限创建容器
--service-cluster-ip-range=10.0.0.0/24 \ # service服务的虚拟网段
--enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,ResourceQuota,NodeRestriction \ # 允许使用哪些插件
--authorization-mode=RBAC,Node \ # 授权模式(RBAC-基于角色授权,Node-基于节点授权)
--enable-bootstrap-token-auth=true \ # 使用token的形式颁发证书完成认证(节点比较多的时候)
--token-auth-file=/opt/kubernetes/cfg/token.csv \ # 使用bootstrap颁发证书时基于特定用户,这里保存了特定用户的用户名(token,用户名,过期时间,"用户所在的名称空间")
--service-node-port-range=30000-32767 \ # service暴露的端口范围
# 证书相关
# 访问kubelet时的证书
--kubelet-client-certificate=/opt/kubernetes/ssl/server.pem \
--kubelet-client-key=/opt/kubernetes/ssl/server-key.pem \
# 使用https访问apiserver时的证书
--tls-cert-file=/opt/kubernetes/ssl/server.pem \
--tls-private-key-file=/opt/kubernetes/ssl/server-key.pem \
--client-ca-file=/opt/kubernetes/ssl/ca.pem \
--service-account-key-file=/opt/kubernetes/ssl/ca-key.pem \
# 访问etcd时的证书
--etcd-cafile=/opt/etcd/ssl/ca.pem \
--etcd-certfile=/opt/etcd/ssl/server.pem \
--etcd-keyfile=/opt/etcd/ssl/server-key.pem \
# 日志相关
--audit-log-maxage=30 \ # 日志文件的最大的大小
--audit-log-maxbackup=3 \
--audit-log-maxsize=100 \
--audit-log-path=/opt/kubernetes/logs/k8s-audit.log"
- 修改controller-manage的配置文件
通常没有需要改的东西,
不修改
# sudo vim /opt/kubernetes/cfg/kube-controller-manager.conf
KUBE_CONTROLLER_MANAGER_OPTS="--logtostderr=false \
--v=2 \
--log-dir=/opt/kubernetes/logs \
--leader-elect=true \ # 有多个apiserver时,自动选举一个作为master apiserver
--master=127.0.0.1:8080 \ # apiserver的IP地址
--address=127.0.0.1 \ # 当前监听的IP地址(需要外部访问的时候需要修改为可访问的IP地址)
--allocate-node-cidrs=true \ # 是否支持CNI网络插件
--cluster-cidr=10.244.0.0/16 \ # 基于CNI网络插件分配的IP地址网段
--service-cluster-ip-range=10.0.0.0/24 \ # 给客户端分配地址时的地址范围
--cluster-signing-cert-file=/opt/kubernetes/ssl/ca.pem \
--cluster-signing-key-file=/opt/kubernetes/ssl/ca-key.pem \
--root-ca-file=/opt/kubernetes/ssl/ca.pem \
--service-account-private-key-file=/opt/kubernetes/ssl/ca-key.pem \
--experimental-cluster-signing-duration=87600h0m0s" # 证书的有效期
- scheduler配置文件
# sudo vim /opt/kubernetes/cfg/kube-scheduler.conf
KUBE_SCHEDULER_OPTS="--logtostderr=false \
--v=2 \
--log-dir=/opt/kubernetes/logs \
--leader-elect \
--master=127.0.0.1:8080 \
--address=127.0.0.1"
启动master
# 启动
sudo systemctl start kube-apiserver
# 开启自启动
sudo systemctl enable kube-apiserver
sudo systemctl start kube-controller-manager
sudo systemctl enable kube-controller-manager
sudo systemctl start kube-scheduler
sudo systemctl enable kube-scheduler
# 验证
ps aux | grep kube
# -->4
ps aux | grep kube | wc -l
tail -f /opt/kubernetes/logs/kube-apiserver.INFO
tail -f /opt/kubernetes/logs/kube-controller-manager.INFO
tail -f /opt/kubernetes/logs/kube-scheduler.INFO
# 运行管理工具
/opt/kubernetes/bin/kubectl get cs
sudo cp /opt/kubernetes/bin/kubectl /bin/
# 查看集群节点状态信息
kubectl get cs
- 配置tls基于bootstrap自动颁发证书
apiserver的配置文件中,对
/opt/kubernetes/cfg/token.csv
中的用户授权
--enable-bootstrap-token-auth=true \ # 使用token的形式颁发证书完成认证(节点比较多的时候)
--token-auth-file=/opt/kubernetes/cfg/token.csv \ # 使用bootstrap颁发证书时基于特定用户,这里保存了特定用户的用户名(token,用户名,过期时间,"用户所在的名称空间")
# 授权
# kubectl create clusterrolebinding kubelet-bootstrap --clusterrole=system:node-bootstrapper --user=kubelet-bootstrap
评论区