【4】搭建k8s集群系列(二进制部署)之安装master节点服务(kube-apiserver)

一、下载k8s二进制文件

下载地址:

https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG

-1.20.md

注:打开链接你会发现里面有很多包,下载一个 server 包就够了,包含了 Master 和 Worker Node 二进制文件。

二、解压二进制包

bash 复制代码
# 创建工作目录
mkdir -p /opt/kubernetes/{bin,cfg,ssl,logs}
# 解压
tar zxvf kubernetes-server-linux-amd64.tar.gz
cd kubernetes/server/bin
cp kube-apiserver kube-scheduler kube-controller-manager /opt/kubernetes/bin
cp kubectl /usr/bin/

三、部署 kube-apiserver

3.1 创建配置文件

bash 复制代码
cat > /opt/kubernetes/cfg/kube-apiserver.conf << EOF
KUBE_APISERVER_OPTS="--logtostderr=false \\
--v=2 \\
--log-dir=/opt/kubernetes/logs \\
--etcd-servers=https://192.168.1.20:2379,https://192.168.1.21:2379,https://192.168.1.22:2379 \\
--bind-address=192.168.1.20 \\
--secure-port=6443 \\
--advertise-address=192.168.1.20 \\
--allow-privileged=true \\
--service-cluster-ip-range=10.0.0.0/24 \\
--enable-admission-
plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,ResourceQuota,NodeRestriction\\
--authorization-mode=RBAC,Node \\
--enable-bootstrap-token-auth=true \\
--token-auth-file=/opt/kubernetes/cfg/token.csv \\
--service-node-port-range=30000-32767 \\
--kubelet-client-certificate=/opt/kubernetes/ssl/server.pem \\
--kubelet-client-key=/opt/kubernetes/ssl/server-key.pem \\
--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 \\
--service-account-issuer=api \\
--service-account-signing-key-file=/opt/kubernetes/ssl/server-key.pem \\
--etcd-cafile=/opt/etcd/ssl/ca.pem \\
--etcd-certfile=/opt/etcd/ssl/server.pem \\
--etcd-keyfile=/opt/etcd/ssl/server-key.pem \\
--requestheader-client-ca-file=/opt/kubernetes/ssl/ca.pem \\
--proxy-client-cert-file=/opt/kubernetes/ssl/server.pem \\
--proxy-client-key-file=/opt/kubernetes/ssl/server-key.pem \\
--requestheader-allowed-names=kubernetes \\
--requestheader-extra-headers-prefix=X-Remote-Extra- \\
--requestheader-group-headers=X-Remote-Group \\
--requestheader-username-headers=X-Remote-User \\
--enable-aggregator-routing=true \\
--audit-log-maxage=30 \\
--audit-log-maxbackup=3 \\
--audit-log-maxsize=100 \\
--audit-log-path=/opt/kubernetes/logs/k8s-audit.log"
EOF
html 复制代码
注:上面两个\ \ 第一个是转义符,第二个是换行符,使用转义符是为了使用 EOF
保留换行符。
• --logtostderr:启用日志
• ---v:日志等级
• --log-dir:日志目录
• --etcd-servers:etcd 集群地址
• --bind-address:监听地址
• --secure-port:https 安全端口
• --advertise-address:集群通告地址
• --allow-privileged:启用授权
• --service-cluster-ip-range:Service 虚拟 IP 地址段
• --enable-admission-plugins:准入控制模块
• --authorization-mode:认证授权,启用 RBAC 授权和节点自管理
• --enable-bootstrap-token-auth:启用 TLS bootstrap 机制
• --token-auth-file:bootstrap token 文件
• --service-node-port-range:Service nodeport 类型默认分配端口范围
• --kubelet-client-xxx:apiserver 访问 kubelet 客户端证书
• --tls-xxx-file:apiserver https 证书
• 1.20 版本必须加的参数:--service-account-issuer,--service-account-
signing-key-file
• --etcd-xxxfile:连接 Etcd 集群证书
• --audit-log-xxx:审计日志
• 启动聚合层相关配置:--requestheader-client-ca-file,--proxy-client-
cert-file,--proxy-client-key-file,--requestheader-allowed-
names,--requestheader-extra-headers-prefix,--requestheader-group-
headers,--requestheader-username-headers,--enable-aggregator-
routing

3.2 拷贝上一篇文章生成的证书

bash 复制代码
cp ~/TLS/k8s/ca*pem ~/TLS/k8s/server*pem /opt/kubernetes/ssl/

3.3 启用 TLS Bootstrapping 机制

TLS Bootstraping:Master apiserver 启用 TLS 认证后,Node 节点 kubelet 和kube-proxy 要与 kube-apiserver 进行通信,必须使用 CA 签发的有效证书才可以,当 Node 节点很多时,这种客户端证书颁发需要大量工作,同样也会增加集群扩展复杂度。为了简化流程,Kubernetes 引入了 TLS bootstraping 机制来自动颁发客户端证书,kubelet 会以一个低权限用户自动向 apiserver 申请证书,kubelet 的证书由 apiserver 动态签署。所以强烈建议在 Node 上使用这种方式,目前主要用于 kubelet,kube-proxy 还是由我们统一颁发一个证书。

TLS bootstraping 工作流程:

创建上述配置文件中 token 文件:

bash 复制代码
cat > /opt/kubernetes/cfg/token.csv << EOF
c47ffb939f5ca36231d9e3121a252940,kubelet-bootstrap,10001,"system:node-bootstrapper"
EOF

格式:token,用户名,UID,用户组

token 也可自行生成替换:

bash 复制代码
head -c 16 /dev/urandom | od -An -t x | tr -d ' '

3.4 systemd 管理 apiserver

bash 复制代码
cat > /usr/lib/systemd/system/kube-apiserver.service << EOF
[Unit]
Description=Kubernetes API Server
Documentation=https://github.com/kubernetes/kubernetes
[Service]
EnvironmentFile=/opt/kubernetes/cfg/kube-apiserver.conf
ExecStart=/opt/kubernetes/bin/kube-apiserver \$KUBE_APISERVER_OPTS
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF

3.5 启动并设置开机启动

bash 复制代码
systemctl daemon-reload
systemctl start kube-apiserver
systemctl enable kube-apiserver
相关推荐
陌上阳光3 小时前
docker搭建ray集群
docker·容器·ray
这就是佬们吗3 小时前
初识 docker [上]
java·开发语言·笔记·docker·容器
FJW0208144 小时前
负载均衡集群HAproxy
linux·服务器·云原生·负载均衡
BigBigHang4 小时前
【docker】DM8达梦数据库的docker-compose以及一些启动踩坑
数据库·docker·容器
云道轩4 小时前
使用Docker在Rocky Linux 9.5上在线部署LangFlow
linux·人工智能·docker·容器·langflow
伟大的大威4 小时前
Docker 部署 Supabase并连接
运维·docker·容器
杰克逊的日记4 小时前
k8s的csi对接GPFS
云原生·容器·kubernetes·存储·gpfs
岚天start4 小时前
云服务器以域名形式访问机房Kubernetes集群服务之解决方案
nginx·docker·kubernetes·kubesphere·解决方案·云服务器·机房
容器魔方8 小时前
「中科类脑」正式加入 Karmada 用户组!携手社区共建多集群生态
云原生·容器·云计算
终端行者8 小时前
k8s之ingress定义https访问方式
容器·https·kubernetes