Dynamic proxy_pass in nginx to another pod in Kubernetes Dynamic proxy_pass in nginx to another pod in Kubernetes nginx nginx

Dynamic proxy_pass in nginx to another pod in Kubernetes


After much research and trial and error I managed to solve this. First I changed the pod specification to:

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

then I also had to disable the ipv6 for the resolver in nginx:

location ~ ^/(.+)$ {        resolver 127.0.0.1:53 ipv6=off;        set $backend "http://$1:80";        proxy_pass $backend;}

Then it works as expected!


I resolved this by coredns docker :my nginx and coredns are all deploy on host

step1: config Corefilein Corefile maybe you should change k8s master config refer: https://coredns.io/plugins/kubernetes/

sudo mkdir /etc/coredns; sudo tee /etc/coredns/Corefile   <<-'EOF' .:53 {    log    errors    health    kubernetes cluster.local in-addr.arpa ip6.arpa {       endpoint http://172.31.88.71:8080       pods insecure       upstream       fallthrough in-addr.arpa ip6.arpa       ttl 30    }    forward . /etc/resolv.conf    cache 30    loop    reload    loadbalance } EOF

step2:config docker and then start it

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/CorefileEOF

step3: config nginx and then reload

resolver 127.0.0.1 valid=60s ipv6=off;