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

如何在Kubernetes集群中通过server_name请求Nginx服务?

解决Kubernetes内部Pod通过自定义域名访问Nginx的问题

下面是几种可行的解决方法,你可以根据集群环境选择:

方法一:请求时临时指定域名映射(快速验证)

直接在curl命令中添加--resolve参数,将api.test.com解析到Nginx服务的ClusterIP:

# 先获取Nginx服务的ClusterIP
kubectl get svc nginx-egress-app-chart-svc-web -n app
# 替换<ClusterIP>为实际IP后执行curl
curl --resolve api.test.com:80:<ClusterIP> http://api.test.com

方法二:在Pod中持久化配置hosts映射

如果需要Pod每次启动都能解析该域名,可通过Pod的hostAliases字段添加固定映射:
修改Pod的Deployment配置,加入以下内容:

spec:
  template:
    spec:
      hostAliases:
      - ip: "<Nginx服务ClusterIP>"
        hostnames:
        - "api.test.com"

更新Deployment后,新启动的Pod的/etc/hosts会自动添加这条映射,直接执行curl http://api.test.com即可访问。

方法三:通过CoreDNS配置全局内部域名解析

若需要整个集群的Pod都能解析api.test.com到Nginx服务,可修改CoreDNS的ConfigMap:

  1. 编辑CoreDNS配置:
kubectl edit configmap coredns -n kube-system
  1. 在Corefile中添加rewrite规则(假设Nginx服务在app命名空间):
.:53 {
    # 保留原有配置
    rewrite name api.test.com nginx-egress-app-chart-svc-web.app.svc.cluster.local
    # 保留原有配置
}
  1. 重启CoreDNS Pod使配置生效:
kubectl rollout restart deployment coredns -n kube-system

之后集群内所有Pod都可直接通过http://api.test.com访问Nginx服务。

方法四:使用Ingress绑定域名(兼顾内外部访问)

如果集群部署了Ingress Controller,可创建Ingress资源关联域名与Nginx服务:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: nginx-ingress
  namespace: app
spec:
  rules:
  - host: api.test.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: nginx-egress-app-chart-svc-web
            port:
              number: 80

创建完成后,结合方法三的CoreDNS配置,即可让内部Pod通过域名访问。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 20:23:28