#networking #kubernetes #kubernetes-helm #kubernetes-ingress #minikube
#сеть #kubernetes #kubernetes-рулевой #kubernetes-вход #minikube
Вопрос:
minikube версии v1.13.0 в Ubuntu 18.04 с Kubernetes версии v1.19.0 в Docker 19.03.8. С использованием helm / helmfile («v3.3.4»). Виртуальная машина Ubuntu находится на виртуальной рабочей станции, работающей на Win10, сеть установлена как NAT, все в моей домашней сети Wi-Fi.
Я пытаюсь использовать ingress-backend stable/nginx-ingress 1.36.0
. У меня есть nginx-ingress-1.36.0.tgz
в папке ingress / charts, и у меня включен ingress / enabled minikube addons enable ingress
.
До того, как я включил вход в minikube, все будет успешно развернуто (без ошибок), но service / LB остался в ожидании:
ClusterIP 10.101.41.156 <none> 8080/TCP
ingress-controller-nginx-ingress-controller LoadBalancer 10.98.157.222 <pending> 80:30050/TCP,443:32294/TCP
После того, как я включил вход в minikube, теперь я получаю эту connection refused
ошибку:
STDERR:
Error: UPGRADE FAILED: cannot patch "ingress-service" with kind Ingress:
Internal error occurred: failed calling webhook "validate.nginx.ingress.kubernetes.io": Post "https://ingress-nginx-controller-admission.kube-system.svc:443/extensions/v1beta1/ingresses?timeout=30s":
dial tcp 10.105.131.220:443: connect: connection refused
COMBINED OUTPUT:
Error: UPGRADE FAILED: cannot patch "ingress-service" with kind Ingress:
Internal error occurred: failed calling webhook "validate.nginx.ingress.kubernetes.io": Post "https://ingress-nginx-controller-admission.kube-system.svc:443/extensions/v1beta1/ingresses?timeout=30s":
dial tcp 10.105.131.220:443: connect: connection refused
Я не знаю, что это за IP 10.105.131.220 — похоже на pvt IP. Это не мой IP-адрес minikube, или мой IP-адрес виртуальной машины, или IP-адрес моего ноутбука, я не могу его пропинговать.
Но все по-прежнему развертывается нормально, но балансировщик нагрузки все еще показывает pending
.
Обновить
Я пропустил один из шагов, основанных на документации
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.30.0/deploy/static/mandatory.yaml
Я остановил / удалил minkube и все переделал, теперь ошибка исчезла, но балансировщик нагрузки по-прежнему <pending>
Ответ №1:
По умолчанию все подобные решения minikube
вам не предоставляются LoadBalancer
. Облачные решения, такие как EKS, Google Cloud, Azure, делают это за вас автоматически, вращая в фоновом режиме отдельный LB. Вот почему вы видите Pending
статус.
Решения:
- используйте MetalLB на minikube
MetalLB подключается к вашему кластеру Kubernetes и предоставляет реализацию балансировки сетевой нагрузки. Короче говоря, это позволяет создавать сервисы типа Kubernetes LoadBalancer
в кластерах, которые не работают на облачном провайдере и, следовательно, не могут просто подключаться к платным продуктам для обеспечения балансировки нагрузки.
Установка:
kubectl apply -f https://raw.githubusercontent.com/google/metallb/v0.8.1/manifests/metallb.yaml
namespace/metallb-system created
podsecuritypolicy.policy/speaker created
serviceaccount/controller created
serviceaccount/speaker created
clusterrole.rbac.authorization.k8s.io/metallb-system:controller created
clusterrole.rbac.authorization.k8s.io/metallb-system:speaker created
role.rbac.authorization.k8s.io/config-watcher created
clusterrolebinding.rbac.authorization.k8s.io/metallb-system:controller created
clusterrolebinding.rbac.authorization.k8s.io/metallb-system:speaker created
rolebinding.rbac.authorization.k8s.io/config-watcher created
- используйте туннель minikube
Службы типа LoadBalancer могут быть доступны с помощью команды туннелирования minikube. Он должен быть запущен в отдельном окне терминала, чтобы поддерживать работу балансировщика нагрузки. Ctrl-C в терминале можно использовать для завершения процесса, после чего сетевые маршруты будут очищены.
minikube tunnel
выполняется как процесс, создавая сетевой маршрут на хосте к службе CIDR кластера, используя IP-адрес кластера в качестве шлюза. Команда туннелирования предоставляет внешний IP-адрес непосредственно любой программе, запущенной в операционной системе хоста.
Комментарии:
1. Спасибо, хорошо, я попробую MetalLB. И да, мое первоначальное понимание заключалось в том, что вам нужен облачный провайдер, чтобы получить балансировщик нагрузки, но в некоторой документации указано, что я мог бы сделать это с помощью nginx / ingress. Итак, что в этом хорошего — как / для чего я использую этот nginx / ingress?
2. я считаю, что вам лучше создать второе сообщение и спросить там цель использования nginx / ingress. Огромная тема, и у вас будет много мнений и объяснений. Этот вопрос касается
Pending
состояния в необлачных решениях3. Пытался внедрить metallb, пришлось модифицировать мой файл helmfile. Пришлось использовать bitnami / stable. После всего этого:
MetalLB is now running in the cluster
.ingress-backend bitnami/metallb 0.1.24
.LoadBalancer Services in your cluster are now available on the IPs you defined in MetalLB's configuration
.ingress-backend default metallb-0.1.24 0.9.3
. Но я не вижу никакого созданного балансировщикаkubectl get services -o wide --all-namespaces
нагрузки — я получаю все остальное, но не создан балансировщик нагрузки. Поэтому придется отлаживать / исследовать.4. Попробовал hello world, как в ссылке, не сработало — балансировщик нагрузки показывает <ожидание>
nginx LoadBalancer 10.111.44.136 <pending> 80:31009/TCP 10m
5. настроена карта конфигурации ?