2017-04-10 2 views
2

Kubernetes에서 Nginx를 실행 중입니다.Nginx proxy_pass 지시문 문자열 보간

proxy_pass "http://service-1.default"; 

는 다음 작동하지 않습니다하지만 :

set $service "service-1"; 
proxy_pass "http://$service.default"; 

내가 지금까지와 같은 no resolver defined to resolve service-1.default

말하는 오류가

나는 다음과 같은 proxy_pass을 사용

는 예상대로 작동 지시어 나는 proxy_pass이 똑같은 문자열을 받고 있다고 말할 수 있습니다. 왜 다르게 행동합니까?

정규식을 사용하여 URL에서 동적으로 서비스 이름을 가져 오기 때문에 변수를 사용해야합니다.

답변

4

이유와 해결책을 찾았습니다.

Nginx는 변수가 proxy_pass에서 사용되고 있는지 감지합니다. (나는 그 방법을 모르겠습니다). 변수가 없으면 시작시 호스트 이름을 확인하고 IP 주소를 캐시합니다. 변수가있는 경우 런타임에 IP를 조회하기 위해 분석기 (DNS 서버)를 사용합니다. 당신이 nslookup service-1을 실행하여 얻을 수있는 서비스의 전체 로컬 DNS 이름이 사용되어야 함을

resolver kube-dns.kube-system.svc.cluster.local valid=5s; 
set $service "service-1"; 
proxy_pass "http://$service.default.svc.cluster.local"; 

참고 :

그래서 솔루션은이 같은 KUBE DNS 서버를 지정하는 것입니다.