nginx中的动态代理_传递到Kubernetes中的另一个pod
我正在尝试创建一个nginx代理,它将请求转发到nginx中的动态代理_传递到Kubernetes中的另一个pod,nginx,dns,kubernetes,dnsmasq,Nginx,Dns,Kubernetes,Dnsmasq,我正在尝试创建一个nginx代理,它将请求转发到/到http://。我首先尝试了以下方法: location ~ ^/(.+)$ { set $backend "http://$1:80"; proxy_pass $backend; } 但它无法说出以下内容(调用/myservice): 由于myservice无法从外部访问,因此我尝试将其作为侧车安装在同一个pod中,并尝试将其用于DNS解析(如示例所示),并将我的nginx配置更改为如下所示: location ~ ^/(.
/
到http://
。我首先尝试了以下方法:
location ~ ^/(.+)$ {
set $backend "http://$1:80";
proxy_pass $backend;
}
但它无法说出以下内容(调用/myservice
):
由于myservice
无法从外部访问,因此我尝试将其作为侧车安装在同一个pod中,并尝试将其用于DNS解析(如示例所示),并将我的nginx配置更改为如下所示:
location ~ ^/(.+)$ {
resolver 127.0.0.1:53;
set $backend "http://$1:80";
proxy_pass $backend;
}
spec:
containers:
- name: nginx
image: "nginx:1.10.0"
ports:
- containerPort: 8080
name: "external"
protocol: "TCP"
- name: dnsmasq
image: "janeczku/go-dnsmasq:release-1.0.5"
args:
- --listen
- "0.0.0.0:53"
但现在nginx失败的原因是:
[error] 9#9: *734 myservice could not be resolved (2: Server failure), client: 127.0.0.1, server: nginx-proxy, request: "GET /myservice HTTP/1.1", host: "localhost:8080"
127.0.0.1 - xxx [30/May/2016:10:34:23 +0000] "GET /myservice HTTP/1.1" 502 173 "-" "curl/7.38.0" "-"
我的Kubernetes吊舱是这样的:
location ~ ^/(.+)$ {
resolver 127.0.0.1:53;
set $backend "http://$1:80";
proxy_pass $backend;
}
spec:
containers:
- name: nginx
image: "nginx:1.10.0"
ports:
- containerPort: 8080
name: "external"
protocol: "TCP"
- name: dnsmasq
image: "janeczku/go-dnsmasq:release-1.0.5"
args:
- --listen
- "0.0.0.0:53"
在dnsmasq容器中运行netstat-ntlp
,可以得到:
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN -
tcp 0 0 :::53 :::* LISTEN 1/go-dnsmasq
并在nginx容器中运行nmap--min parallelism 100-sT-sU localhost
:
Starting Nmap 6.47 ( http://nmap.org ) at 2016-05-30 10:33 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00055s latency).
Other addresses for localhost (not scanned): 127.0.0.1
Not shown: 1997 closed ports
PORT STATE SERVICE
53/tcp open domain
8080/tcp open http-proxy
53/udp open domain
看来dnsmasq和nginx确实已经启动并运行了?我会做错什么呢?经过大量的研究和反复尝试,我终于解决了这个问题。首先,我将pod规范更改为:
spec:
containers:
- name: nginx
image: "nginx:1.10.0"
ports:
- containerPort: 8080
name: "external"
protocol: "TCP"
- name: dnsmasq
image: "janeczku/go-dnsmasq:release-1.0.5"
args:
- --listen
- "127.0.0.1:53"
- --default-resolver
- --append-search-domains
- --hostsfile=/etc/hosts
- --verbose
然后,我还必须禁用nginx中解析程序的ipv6:
location ~ ^/(.+)$ {
resolver 127.0.0.1:53 ipv6=off;
set $backend "http://$1:80";
proxy_pass $backend;
}
然后它就如预期的那样工作了 我通过coredns docker解决了这个问题: 我的nginx和coredns都部署在主机上 步骤1:config Corefile 在Corefile中,您可能应该更改k8s主配置,请参阅:
这太棒了。非常感谢。不知道为什么kube dns作为解析程序不起作用。你简直救了我的命。我不知道如何运行另一个容器作为部署的辅助工具。谢谢
tee coreos.sh <<-'EOF'
docker run --restart=always -idt --name coredns \
-v /etc/coredns/Corefile:/etc/coredns/Corefile \
-v /home/ec2-user/.kube/config:/etc/coredns/kubeconfig \
-p 53:53/udp \
coredns/coredns:1.6.9 \
-conf /etc/coredns/Corefile
EOF
resolver 127.0.0.1 valid=60s ipv6=off;