Я разрабатывал локально в docker-compose
, и у меня был контейнер nginx, выполняющий простой proxy_pass
так:
location /app/ {
proxy_pass http://webapp:3000/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
resolver 127.0.0.11;
}
Теперь я хочу перейти на kubernetes
в GKE, и последняя строка вызывает у меня проблемы.
Я попытался переключить преобразователь на:
resolver kube-dns;
Я также пробовал другие IP-адреса и имена, но продолжаю получать ошибку примерно следующего содержания:
nginx: [emerg] host not found in resolver "kube-dns"
Моя установка Kubernetes такова, что у меня есть один модуль с двумя контейнерами: «webapp» и «nginx». Я просто хочу иметь внешнюю службу
, указывающую на nginx, которая может proxy_pass
в webapp.
Есть идеи?
Если nginx живет внутри кубернетов, нет необходимости устанавливать резолвер, так как он определится в правильное место. если nginx
и webapp
живут в одном пространстве имен, вы можете просто
proxy_pass http://webapp
, пока ваше имя службы для webapp называется webapp и использует порт 80.
Если nginx живет снаружи вы должны использовать входной контроль или установить службу для веб-приложения на nodeport. Nodeport откроет один и тот же порт на всех узлах, чтобы вы могли балансировать нагрузку между ними на стороне nginx.
Вы должны указать FQDN для kube-dns и служб.
.
Например, для стандарта GKE kube-dns: kube-dns.kube-system.svc.cluster.local
И если вы находитесь в пространстве имен по умолчанию с вашим webapp сервисом, то это будет: kube-dns.kube-system.svc.local
: webapp.default.svc.cluster.local
Я знаю, что исходный вопрос старый, но, возможно, это кому-то поможет.
Достигнуто это при локальном запуске кластера с использованием Kind с помощью следующих шагов:
1. Проверка конфигурации DNS работающего модуля
kubectl exec -it <имя модуля> -- cat /etc/resolv.conf
search default.svc.cluster.local svc.cluster.local cluster.local home
nameserver 10.96.0.10
options ndots:5
2. Указание IP-адреса сервера имен в качестве преобразователя Nginx
http {
server {
resolver 10.96.0.10 valid=10s;