Запускаем Ingress в minikube, и его адрес показывает localhost

#kubernetes #kubernetes-ingress

#kubernetes #kubernetes-вход

Вопрос:

Я новичок в k8s. Я развернул ingress на minikube, и я обнаружил, что его адрес localhost такой, каким он не должен быть, я думаю. Для этого я не знаю, как продолжить, потому что я должен отредактировать /etc/hosts/ , чтобы добавить элемент dns, но нет, я не мог.
введите описание изображения здесь

И это мой файл конфигурации

 kiloson@ubuntu:~$ cat kubia-ingress.yaml 
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: kubia
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
  rules:
  - host: kubia.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service: 
            name: kubia-nodeport
            port: 
              number: 80
 

версия minikube

 kiloson@ubuntu:~$ minikube version
minikube version: v1.24.0
commit: 76b94fb3c4e8ac5062daf70d60cf03ddcc0a741b
 

Информация об Ubuntu

 kiloson@ubuntu:~$ neofetch
            .-/ oossssoo /-.               kiloson@ubuntu 
        `: ssssssssssssssssss :`           -------------- 
      - ssssssssssssssssssyyssss -         OS: Ubuntu 20.04.3 LTS x86_64 
    .ossssssssssssssssssdMMMNysssso.       Host: Virtual Machine 7.0 
   /ssssssssssshdmmNNmmyNMMMMhssssss/      Kernel: 5.11.0-1022-azure 
   ssssssssshmydMMMMMMMNddddyssssssss      Uptime: 2 hours, 33 mins 
 /sssssssshNMMMyhhyyyyhmNMMMNhssssssss/    Packages: 648 (dpkg), 4 (snap) 
.ssssssssdMMMNhsssssssssshNMMMdssssssss.   Shell: bash 5.0.17 
 sssshhhyNMMNyssssssssssssyNMMMysssssss    Terminal: /dev/pts/0 
ossyNMMMNyMMhsssssssssssssshmmmhssssssso   CPU: Intel Xeon E5-2673 v4 (2) @ 2.294GHz 
ossyNMMMNyMMhsssssssssssssshmmmhssssssso   GPU: 00:08.0 Microsoft Corporation Hyper-V virtual VGA 
 sssshhhyNMMNyssssssssssssyNMMMysssssss    Memory: 1493MiB / 7959MiB 
.ssssssssdMMMNhsssssssssshNMMMdssssssss.
 /sssssssshNMMMyhhyyyyhdNMMMNhssssssss/                            
   sssssssssdmydMMMMMMMMddddyssssssss                              
   /ssssssssssshdmNNNNmyNMMMMhssssss/
    .ossssssssssssssssssdMMMNysssso.
      - sssssssssssssssssyyyssss -
        `: ssssssssssssssssss :`
            .-/ oossssoo /-.
 

Комментарии:

1. localhost адрес указан правильно. Вот как работает minikube. Вы можете получить IP-адрес своего кластера minikube с minikube ip помощью команды. Вы включили ingress заранее с minikube addons enable ingress помощью?

2. Вы правы, я использовал IP-адрес узла, и он работает. Но я видел в официальных документах, что вместо доменного имени указан фактический IP, интересно, почему это произошло. И я уверен, что я включил ingress в minikube. Спасибо!

Ответ №1:

localhost адрес указан правильно. Вот как работает minikube.

Вы можете получить IP-адрес своего кластера minikube с помощью

 minikube ip
 

или

 minikube service <service-name> --url
 

Ответ №2:

Я некоторое время ломал голову над этим и только что заработал, поэтому я добавлю цвет к другим ответам.

Прежде всего, как указано в этом соответствующем вопросе, при первоначальном запуске minikube addons enable ingress он печатается After the addon is enabled, please run "minikube tunnel" and your ingress resources would be available at "127.0.0.1" .

После выполнения шагов в руководстве и решения проблемы в этом вопросе я смог зайти в приложение hello-world, запустив minikube tunnel и добавив 127.0.0.1 hello-world.info в my /etc/hosts .

Я не уверен, почему выполнение учебника kubectl get ingress возвращает нелокальный IP-адрес хоста, но возвращается localhost при локальном запуске, но, похоже, основная проблема здесь заключается в том, что при создании входа в контейнеры docker, в которых запущен minikube, вам нужно перенаправить трафик в контейнеры, minikube tunnel чтобы попасть на открытый входв minikube.

Ответ №3:

Я столкнулся с той же проблемой.

--publish-status-address=localhost Задается в аргументах nginx-ingress-controller. https://github.com/kubernetes/minikube/blob/1b25cac7f5735be22f88a159b35b1996abba3c73/deploy/addons/ingress/ingress-deploy.yaml.tmpl#L373

Я удалил этот аргумент, и он сработал.

 $ kubectl edit deployments.apps -n ingress-nginx ingress-nginx-controller 
 
   - args:
    - /nginx-ingress-controller
    - --election-id=ingress-controller-leader
    - --controller-class=k8s.io/ingress-nginx
    - --watch-ingress-without-class=true
-   - --publish-status-address=localhost
    - --configmap=$(POD_NAMESPACE)/ingress-nginx-controller
    - --report-node-internal-ip-address
    - --tcp-services-configmap=$(POD_NAMESPACE)/tcp-services
    - --udp-services-configmap=$(POD_NAMESPACE)/udp-services
    - --validating-webhook=:8443
    - --validating-webhook-certificate=/usr/local/certificates/cert
    - --validating-webhook-key=/usr/local/certificates/key
 

Комментарии:

1. Да, я запускаю minikube с ExternalDNS, и после его publish-status-address=localhost появления произошел сбой, и я не мог понять, как это предотвратить, поэтому теперь у меня просто есть скрипт для его удаления после развертывания.

Ответ №4:

Чтобы включить ingress в minikube local, просто запустите это:-

сначала проверьте, включены ли дополнения для ingress или нет

список дополнений minikube

если он не включен, выполните следующую команду:-

дополнения minikube включают ingress