使用Skydns的Kubernetes的Nginx解析器

时间:2018-11-05 17:51:46

标签: nginx dns kubernetes reverse-proxy skydns

我找不到让nginx pod解析另一个kubernetes服务URL的方法。

我不是在使用kube-dns ,我们只是在使用kube2sky,我们还没有实现kube-dns,所以我需要在这种情况下进行修复。

例如,我希望nginx解析服务URL app.mynamespace.svc.skydns.local,但如果对该URL执行ping操作,则解析成功。

我的nginx配置部分是:

location /api/v1/namespaces/mynamespace/services/app/proxy/ {
          resolver 127.0.0.1
          set \$endpoint \"http://app.mynamespace.svc.skydns.local/\";
          proxy_pass \$endpoint;
          proxy_http_version 1.1;
          proxy_set_header Connection \"upgrade\";
        }

我需要在变量中指定上游目标,因为即使目标不可用,我也希望nginx启动,如果启动时我没有在变量中指定nginx崩溃,因为上游需要可用且可解析。

我认为的问题是解析器值,我尝试使用127.0.0.1127.0.0.11和配置172.40.0.2:53中指定的skydns IP:

etcdctl get /skydns/config
{"dns_addr":"0.0.0.0:53","ttl":4294967290,"nameservers":["172.40.0.2:53"]}

但是nginx尚无法解析URL。

我应该在nginx config的resolver字段中为kubernetes和skydns config指定什么IP?

请记住,我们没有kube-dns。

谢谢。

1 个答案:

答案 0 :(得分:1)

我认为解析app.mynamespace.svc.skydns.local与配置上游DNS服务器没有任何关系。通常,为此,您配置一个知名的DNS服务器,例如8.8.8.8或您的云基础结构DNS服务器,可能是172.40.0.2。例如,如docs中所述:

$ curl -XPUT http://127.0.0.1:4001/v2/keys/skydns/config \
-d value='{"dns_addr":"127.0.0.1:5354","ttl":3600, "nameservers": ["8.8.8.8:53","8.8.4.4:53"]}'

您可能需要检查kube2sky2窗格的日志,以获取任何指导,并指定所有config options,例如--kube-master-url--etcd-server。也许它无法与Kubernetes主服务器通信并接收正在运行的Pod的更新,以便SRV条目得到更新。