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.confadmin.conf,将原 API Server 地址替换为 Nginx 代理地址:

apiVersion: v1
clusters:
- cluster:
    server: https://jigaobo.apiserver.com:6443  # 改为 Nginx 代理地址
    certificate-authority-data: <原有CA证书>
  name: kubernetes
posted @ 2025-07-22 17:31  姬高波  阅读(27)  评论(0)    收藏  举报