Входной контроллер NodePort недоступен снаружи - PullRequest
1 голос
/ 20 февраля 2020

У меня есть кластер из 3 виртуальных машин, на котором я устанавливаю kubernetes и развернул некоторые модули и службы, которые я хотел бы получить снаружи (мой локальный p c для примера)

Я следовал этому руководству https://kubernetes.github.io/ingress-nginx/deploy/#bare -metal для установки моего входного контроллера. Я создал сервис типа NodePort. Я создал вход, который выглядит следующим образом:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: test-ingress
  annotations:
      kubernetes.io/ingress.class: nginx
spec:
  rules:
  - host: my.service.com
    http:
      paths:
      - path: /
        backend:
          serviceName: myservice
          servicePort: 9090

kubectl get svc myservice дает мне:

NAME        TYPE       CLUSTER-IP        EXTERNAL-IP   PORT(S)          AGE
myservice   NodePort   xxx.xxx.xxx.xxx   <none>        9090:31220/TCP   47m

kubectl get ingress test-ingress дает мне

NAME            HOSTS            ADDRESS          PORTS   AGE
test-ingress    my.service.com   xx.xxx.xxx.xxx   80      49m

На моем локальный компьютер, который я добавил в / etc / hosts, я сопоставил IP-адрес входа с именем my.service.com, когда я пытаюсь пропинговать my.service.com или напрямую пакет 100% тайм-аута запроса ip I go потеря. Я попытался подключиться к визуальному интерфейсу моего сервиса через веб-браузер, и он тоже не работает.

Как мне узнать, почему я не могу получить доступ к своему сервису из-за пределов кластера?

Ответы [ 3 ]

3 голосов
/ 20 февраля 2020

Возможно, проблема с вашим брандмауэром. Проверьте правила брандмауэра, если они блокируют доступ извне к этому порту.

Также вам необходимо получить доступ к службе из NodePort службы, которую вы создали при развертывании входного контроллера.

Также отредактируйте свой войти и добавить свойство tls и hosts с самозаверяющим сертификатом для my.service.com

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: test-ingress
  annotations:
      ingress.kubernetes.io/rewrite-target: /
      kubernetes.io/ingress.class: nginx
spec:
  tls:
  - hosts:
    - my.service.com
    secretName: tls-secret-for my service
  rules:
  - host: my.service.com
    http:
      paths:
      - path: /
        backend:
          serviceName: myservice
          servicePort: 9090
1 голос
/ 20 февраля 2020

Вы должны быть в состоянии свернуться с заголовком хоста, установленным на www.my.service.com

curl --verbose --header 'Host: www.my.service.com' http://nodeip:nodeport/
1 голос
/ 20 февраля 2020

Невозможно ping IP-адрес службы Kubernetes.

IP для сервисов являются виртуальными IP-адресами, поэтому они не могут быть проверены.
Чтобы проверить ваш вход, вы должны попытаться связаться с вашим сервисом. вместо curl.

...