Kubernetes集群配置no_proxy:如何设置不破坏内部通信的取值?
在Kubernetes Pod中配置
no_proxy以保留内部通信 好问题!当你给Pod配置HTTP/HTTPS代理时,no_proxy的设置直接关系到Kubernetes内部服务的正常通信——要是漏了关键值,Pod连不上API Server、无法访问内部Service都是常有的事。我结合实际经验整理了必加的核心值,以及场景化的补充项:
必须包含的核心值
这些是不管集群配置如何都建议加上的基础项:
localhost,127.0.0.1:Pod内部的本地调用绝对不能走代理,否则本地进程间通信会失效kubernetes.default.svc:你提到的默认Kubernetes API服务,是Pod与集群控制平面通信的核心入口kubernetes.default.svc.cluster.local:上述服务的完整FQDN形式,部分场景下Pod会优先使用这个域名访问API Server- 集群的Service CIDR:比如Kubeadm默认的
10.96.0.0/12,所有内部Service的IP都在这个网段里,必须排除在代理之外 - 集群的Pod CIDR:比如Flannel默认的
10.244.0.0/16,确保Pod之间的直接通信不经过代理
场景化补充项
根据你的集群自定义配置,还可以添加以下内容:
- 自定义集群域名后缀:如果你的集群用了非默认的域名后缀(比如
mycorp.cluster),添加.mycorp.cluster就能排除所有该后缀的内部域名 - 节点IP段:如果Pod需要直接访问节点上的服务(比如NodePort、本地存储端点),可以把节点的IP网段加入
no_proxy - 关键组件的固定IP/域名:比如CoreDNS、Etcd的专属地址,确保这些核心组件的通信不受代理影响
示例配置(Deployment片段)
下面是一个实际可用的环境变量配置示例,你可以根据自己集群的CIDR调整:
spec: containers: - name: your-app-container image: your-app-image env: - name: HTTP_PROXY value: "http://your-proxy-server:8080" - name: HTTPS_PROXY value: "http://your-proxy-server:8080" - name: NO_PROXY value: "localhost,127.0.0.1,kubernetes.default.svc,kubernetes.default.svc.cluster.local,10.96.0.0/12,10.244.0.0/16,.mycorp.cluster"
小技巧:获取集群CIDR
如果你不确定自己集群的Service/Pod CIDR,可以用以下命令查询:
# 查询Service CIDR kubectl cluster-info dump | grep -A5 -B5 "service-cluster-ip-range" # 查询Pod CIDR kubectl cluster-info dump | grep -A5 -B5 "cluster-cidr"
内容的提问来源于stack exchange,提问作者Erkan Erol
相关产品推荐
相关产品推荐

