k8s中api-server的高可用
k8s中api-server的高可用
Kubernetes 集群中,使用 Nginx 实现 API Server 高可用
说明:
1、在每个节点都部署一个代理服务(使用nginx或者LVS)、然后进行四层代理转发
2、 如果DNS解析到三个api-server的节点地址、节点再进行nginx代理、对应的nginx节点宕机挂掉、dns就无法解析、这样也是访问不了的(可以使用:把api-server地址解析到本地127.0.0.1地址、这样每个节点访问自身地址就完事了、然后进行nginx代理、nginx监听三台api-server进行转发)
方案架构
客户端 → Nginx(四层负载均衡) → 多个 API Server 实例
↓
(jigaobo.apiserver.com)
1. 安装 Nginx(所有节点)
# Ubuntu/Debian
sudo apt update && sudo apt install -y nginx
# CentOS/RHEL
sudo yum install -y nginx
2. 配置 Nginx 四层代理
编辑 /etc/nginx/nginx.conf,在 stream 模块 中配置 TCP 负载均衡(API Server 默认端口 6443):
stream {
upstream k8s_apiserver {
# 替换为实际的 API Server 节点 IP 和端口
server 192.168.1.101:6443 max_fails=3 fail_timeout=10s;
server 192.168.1.102:6443 max_fails=3 fail_timeout=10s;
server 192.168.1.103:6443 max_fails=3 fail_timeout=10s;
}
server {
listen 6443;
proxy_pass k8s_apiserver;
proxy_timeout 60s;
proxy_connect_timeout 2s;
}
}
3. 配置 DNS 解析
将域名 jigaobo.apiserver.com 解析到 所有 Nginx 节点的 IP(DNS 轮询或使用 VIP):
text
jigaobo.apiserver.com A 192.168.1.100 # Nginx 节点1
jigaobo.apiserver.com A 192.168.1.101 # Nginx 节点2
jigaobo.apiserver.com A 192.168.1.102 # Nginx 节点3
4. 启动 Nginx 并验证
sudo systemctl enable --now nginx
sudo systemctl status nginx
# 测试代理是否生效
curl -k https://jigaobo.apiserver.com:6443/version
预期输出:
{
"major": "1",
"minor": "28",
"gitVersion": "v1.28.2",
...
}
5. 客户端配置
修改所有节点的 /etc/kubernetes/kubelet.conf 和 admin.conf,将原 API Server 地址替换为 Nginx 代理地址:
apiVersion: v1
clusters:
- cluster:
server: https://jigaobo.apiserver.com:6443 # 改为 Nginx 代理地址
certificate-authority-data: <原有CA证书>
name: kubernetes

浙公网安备 33010602011771号