You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

咨询:Kubernetes API Server外部负载均衡配置文档及问题排查

解决Kubernetes API Server外部负载均衡的HTTP/HTTPS配置问题

首先咱们得把核心问题理清楚:你的负载均衡器现在是把客户端的HTTPS请求解密后,以纯HTTP的方式转发给Kubernetes API Server,但API Server默认只监听HTTPS端口(通常是6443),会直接拒绝HTTP请求,这就是你看到"plain http request was sent to https server"错误的原因。下面给你两种可行的解决思路和具体配置步骤:

一、选择正确的负载均衡转发模式

根据你的使用场景,推荐两种配置方向,选一种适配你的需求即可:

1. TCP四层转发(最省心的方案,推荐)

Kubernetes API Server本身已经自带SSL/TLS处理能力,这种模式下负载均衡器不需要解密流量,只做纯TCP流量转发:

  • 配置负载均衡器的监听端口为443,后端转发目标设置为所有master节点的6443端口(协议选TCP)
  • 这种方式不需要在负载均衡器上配置SSL证书,所有加密解密都由API Server自己处理,还能避免证书不一致的问题
  • 最后更新你的kubeconfig文件,把server字段改成你的DNS名称,比如https://k8s-api.yourdomain.com:443

2. HTTPS七层代理(适合需要LB层做流量管控的场景)

如果你必须在负载均衡器层做SSL终止(比如要加WAF、流量审计等功能),那必须满足两个关键配置:

  • 负载均衡器的HTTPS监听端口(443)要配置正确的SSL证书,并且证书的SAN(Subject Alternative Name)必须包含你的API Server域名
  • 配置负载均衡器把解密后的请求以HTTPS协议转发到后端master节点的6443端口,绝对不能用HTTP!
    • 额外注意:如果你的API Server用的是自签证书,需要把对应的CA证书导入负载均衡器的信任列表,否则LB会拒绝和API Server建立HTTPS连接

二、验证配置是否生效

配置完之后,你可以用下面的命令验证:

  1. 测试API连通性:
    curl -v https://your-dns-name.com:443/version
    
  2. 检查kubeconfig的server字段是否正确指向你的DNS:
    kubectl config view --minify -o jsonpath='{.clusters[0].cluster.server}'
    
  3. 查看API Server日志,确认没有HTTP请求错误:
    kubectl logs -n kube-system kube-apiserver-<你的master节点名称> | grep "plain http request"
    

三、额外的注意事项

  • 确保所有master节点的API Server配置中,--secure-port是6443(默认值),并且尽量关闭--insecure-port(如果开启了的话),减少安全风险
  • 如果你用的是云厂商的负载均衡(比如AWS NLB/ALB、Azure LB),要注意四层和七层LB的配置差异:比如AWS NLB适合TCP四层转发,ALB适合七层HTTPS代理
  • 配置负载均衡器的健康检查:用HTTPS协议访问API Server的/healthz端点(端口6443),确保能准确识别master节点的健康状态

内容的提问来源于stack exchange,提问作者Ijaz Ahmad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 06:26:43