相关疑难解决方法(0)

在Kubernetes中,DNS无法解决NGINX问题

我有一个Kubernetes集群,我用kube-aws设置.我正在尝试运行自定义NGINX配置,该配置使用DNS解析到proxy_pass.这是NGINX代码块

location /api/v1/lead {
  resolver 10.3.0.10 ipv6=off;
  set $container lead-api;
  proxy_pass http://$container:3000;
}
Run Code Online (Sandbox Code Playgroud)

10.3.0.10来自Kubernetes中的DNS服务的集群IP.我也试过127.0.0.11,这是我们在docker-compose/docker环境中使用的.

$ kubectl describe --namespace=kube-system service kube-dns
Name:                   kube-dns
Namespace:              kube-system
Labels:                 k8s-app=kube-dns
                        kubernetes.io/cluster-service=true
                        kubernetes.io/name=KubeDNS
Selector:               k8s-app=kube-dns
Type:                   ClusterIP
IP:                     10.3.0.10
Port:                   dns     53/UDP
Endpoints:              10.2.26.61:53
Port:                   dns-tcp 53/TCP
Endpoints:              10.2.26.61:53
Session Affinity:       None
Run Code Online (Sandbox Code Playgroud)

此配置适用于使用docker-compose的三种不同环境.但是,我在Kubernetes集群的NGINX日志中收到以下错误

[错误] 9#9:*20无法解决lead-api(2:服务器故障),客户端:10.2.26.0,服务器:,请求:"GET/api/v1/lead/661DF757-722B-41BB-81BD -C7FD398BBC88 HTTP/1.1"

如果我在NGINX pod中运行nslookup,我可以使用相同的dns服务器解析主机:

$ kubectl exec nginx-1855584872-kdiwh -- nslookup lead-api
Server:         10.3.0.10
Address:        10.3.0.10#53

Name:   lead-api.default.svc.cluster.local
Address: 10.3.0.167
Run Code Online (Sandbox Code Playgroud)

我不知道它是否重要,但请注意错误的"服务器"部分是空的.当我查看dnsmasq的pod日志时,我看不到任何相关内容.如果我更改NGINX块以对proxy_pass进行硬编码,那么它就可以解决.但是,我有其他需要动态代理名称的配置.我可以通过这种方式对每个上游进行硬编码,但我想知道如何使DNS解析器工作.

location /api/v1/lead {
  proxy_pass http://lead-api:3000;
}
Run Code Online (Sandbox Code Playgroud)

dns nginx amazon-web-services kubernetes

7
推荐指数
1
解决办法
5118
查看次数

Openshift 中的 NGINX - NGINX 无法解析内部主机名

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

location /api/ {
   set $pass_url http://service.namespace.svc:8080$request_uri;
   proxy_pass  $pass_url;
}
Run Code Online (Sandbox Code Playgroud)

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

resolver kube-dns.kube-system.svc.cluster.local;
Run Code Online (Sandbox Code Playgroud)

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

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

我可以使用 Openshift 中的 Kubernetes DNS 主机名,或者其他解决方案来解决这个问题?

dns nginx resolver openshift openshift-origin

7
推荐指数
1
解决办法
1505
查看次数