【问题标题】:NGINX in Openshift - NGINX can't resolve internal hostnamesOpenshift 中的 NGINX - NGINX 无法解析内部主机名
【发布时间】:2019-07-24 09:10:49
【问题描述】:

在 nginx 容器的 proxy_pass 配置中使用变量重写和代理到内部 Openshift 服务时,由于需要解析器,NGINX 无法解析服务的 DNS。例如:

location /api/ {
   set $pass_url http://service.namespace.svc:8080$request_uri;
   proxy_pass  $pass_url;
}

在使用标准 Kubernetes 时,我可以使用kube-dns.kube-system.svc.cluster.local作为解析器:

resolver kube-dns.kube-system.svc.cluster.local;

但 Openshift 不提供此功能。我尝试使用容器/etc/resolv.conf 中的 IP,它只是我集群中运行 DNS 服务器的节点之一,但仍然无法解析。

最奇怪的部分是容器终端内部的nslookup service.namespace.svc,它使用/etc/resolv.conf 中的名称服务器,它工作正常。

我是否可以使用与 Openshift 中的 Kubernetes DNS 主机名等效的名称,或者是否有其他解决方案可以解决这个问题?

【问题讨论】:

    标签: nginx dns openshift openshift-origin resolver


    【解决方案1】:

    在 OpenShift 4.7 中运行 ngnix 我可以通过添加来解决这个问题

    resolver dns-default.openshift-dns.svc.cluster.local

    server 配置。显然,ngnix 没有解析/etc/resolv.conf,但是(在我的例子中)dns-default.openshift-dns.svc.cluster.local 也解析为172.30.0.10,它在/etc/resolv.conf 中被定义为nameserver

    【讨论】:

      【解决方案2】:

      在 Openshift 集群中,每个主节点上都有 SkyDNS 服务。它通常侦听端口 8053。只需将它们用作 nginx 配置的解析器,就可以了:

      resolver your-openshift-master-node1-ip:8053 your-openshift-master-node2-ip:8053;
      

      【讨论】:

        【解决方案3】:

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-12-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-12-07
          • 1970-01-01
          • 2023-04-02
          • 1970-01-01
          相关资源
          最近更新 更多