Minikube и ingress-nginx не имеют открытого порта 80

Я новичок в ingress-nginx, и я включил его с помощью minikube, используя minikube addons enable ingress. При поиске сервисов, связанных с ingress-nginx, я запустил kubectl get services -n kube-system и получил:

NAME                                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                  AGE
ingress-nginx-controller-admission   ClusterIP   10.96.141.138   <none>        443/TCP                  16m
kube-dns                             ClusterIP   10.96.0.10      <none>        53/UDP,53/TCP,9153/TCP   16m

Заметив, что мне не хватает 80 порта, я запустил kubectl describe service/ingress-nginx-controller-admission -n kube-system и получил:

Name:              ingress-nginx-controller-admission
Namespace:         kube-system
Labels:            addonmanager.kubernetes.io/mode=Reconcile
                   app.kubernetes.io/component=controller
                   app.kubernetes.io/instance=ingress-nginx
                   app.kubernetes.io/name=ingress-nginx
Annotations:       <none>
Selector:          app.kubernetes.io/component=controller,app.kubernetes.io/instance=ingress-nginx,app.kubernetes.io/name=ingress-nginx
Type:              ClusterIP
IP:                10.96.141.138
Port:              https-webhook  443/TCP
TargetPort:        webhook/TCP
Endpoints:         172.17.0.3:8443
Session Affinity:  None
Events:            <none>

При попытке доступа к конечной точке https://ingress-nginx-controller-admission.kube-system.svc.cluster.local/foo я получаю эту ошибку:

FetchError: request to https://ingress-nginx-controller-admission.kube-system.svc.cluster.local/foo failed, reason: unable to verify the first certificate

, хотя попадание в конечную точку /foo из пода через вход работает нормально. Я просматривал документацию по tls безрезультатно. Любая помощь в этом будет высоко оценена.

Обновлено: я добавил вывод kubectl get svc -A для каждого запроса:

NAMESPACE     NAME                                 TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
default       auth-svc                             ClusterIP      10.100.218.231   <none>        4000/TCP                     13s
default       client-svc                           ClusterIP      10.106.143.107   <none>        3000/TCP                     12s
default       kubernetes                           ClusterIP      10.96.0.1        <none>        443/TCP                      37m
kube-system   ingress-nginx-controller-admission   ClusterIP      10.96.141.138    <none>        443/TCP                      36m
kube-system   kube-dns                             ClusterIP      10.96.0.10       <none>        53/UDP,53/TCP,9153/TCP       37m

Добавить вывод kubectl get svc -A

Arghya Sadhu 22.12.2020 06:24

@ArghyaSadhu спасибо. Я обновил исходный пост этой информацией

reactor 22.12.2020 06:30

Какая версия миникуба? Какой драйвер для миникуба?

zigarn 22.12.2020 06:32

@zigarn Я использую minikube версии 1.16.0 в Arch Linux. Я не указал драйвер, поэтому я считаю, что по умолчанию. Спасибо.

reactor 22.12.2020 06:37
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
1
4
3 282
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Сервис, на который вы смотрите, как следует из его названия, является Admission Controller аддона входа minikube.
Он используется Ingress Controller для анализа определений Ingress и настройки базового nginx (вы можете взглянуть на развертывание надстройки minikube ingress)

Чтобы получить доступ к незащищенным входам, которые вы, возможно, определили, вам нужно подключиться к портам 80 или 443 машины minikube (доступно через minikube ip). (Вы можете увидеть эти порты прослушивания, выполнив minikube ssh -- docker container ls --filter label=app.kubernetes.io/name=ingress-nginx)

Вам нужна вот эта документация: https://kubernetes.io/docs/tasks/access-application-cluster/ingress-minikube/

Итак, если вы определили Ingress с помощью host=hello-world.info и path=/foo, вы сможете получить к нему доступ с помощью:

curl --header 'Host: hello-world.info' http://`minikube ip`:80/foo

Конечно, лучше определить запись DNS для сопоставления hello-world.info с IP-адресом minikube.

Спасибо. Я должен был уточнить, что я могу нажать hello-world.info, а также IP-адрес minikube. Я просто не могу попасть по этому IP-адресу из одного из модулей, что я пытался сделать, когда пытался нажать https://ingress-nginx-controller-admission.kube-system.svc.c‌​luster.local/foo. Надеюсь, это поможет прояснить мою цель. Спасибо!

reactor 22.12.2020 08:32

Ingress больше предназначен для обслуживания вне кластера; изнутри кластера, просто используйте прямой доступ к сервису. Сервис ingress-nginx-controller-admission не предназначен для раскрытия контроллера входящего трафика, он предназначен для внутренних механизмов входящего трафика. Если вам нужно пройти через ingress, вы должны действовать как извне: добавить DNS-запись, доступную из ваших подов, или создать свою службу на 80-м порту развертывания ingress-nginx-controller, но тогда имя службы и host Ingress должен совпадать.

zigarn 22.12.2020 09:24

Nginx ingress на minikube не использует службу для предоставления доступа к модулям ingress.

Он использует hostPort. Вот часть yaml модуля контроллера ingres:

$ kubectl get pod -n kube-system   ingress-nginx-controller-789d9c4dc-5wnc2 -oyaml

[...]
ports:
- containerPort: 80
  hostPort: 80
  name: http
  protocol: TCP
- containerPort: 443
  hostPort: 443
  name: https
  protocol: TCP
- containerPort: 8443
  name: webhook
  protocol: TCP
[...]

Его поведение описано в справочной документации k8s api

hostPort Номер порта для предоставления на хосте. Если указано, это должен быть допустимый номер порта, 0 < x < 65536. Если указан HostNetwork, он должен соответствовать ContainerPort. Большинству контейнеров это не нужно.

Благодаря этому к входу можно легко получить доступ с помощью:

curl $(minikube ip)
Ответ принят как подходящий

running kubectl expose deployment ingress-nginx-controller --target-port=80 --type=NodePort -n kube-system позволяет мне получить доступ к входу из модуля в кластере.

Другие вопросы по теме