Kubernetes Ingress Controller GPC GKE не может получить доступ к сайту

Kubernetes Ingress Controller не может получить доступ к сайту

Привет, я впервые пытаюсь развернуть приложение с помощью kubernetes. Проблема, с которой я столкнулся, заключается в том, что я хочу иметь возможность связывать поддомены с моим svc, но когда я пытаюсь перейти к ссылкам, я получаю

Этот сайт недоступен

Я объясню шаги, которые я сделал для них, возможно, я что-то не так или отсутствует

  1. Я установил ingress-controller на облачную платформу Google

  2. В GCP -> Сетевые службы -> Облачный DNS

    а. Я указал testcompany.com с помощью Google DNS.

    б. Я создал запись A, указывающую на общедоступный IP-адрес из предыдущего шага ingress-nginx-controller.

  3. мой манифест svc

    apiVersion: v1
    kind: Service
    metadata:
      namespace: staging
      name: testcompany-svc
      labels:
        app: testcompany-svc
    spec:
      type: NodePort
      ports:
        - name: test-http
          port: 80
          protocol: TCP
          targetPort: 3001
      selector:
        app: testcompany
    
  4. мой входной манифест

    apiVersion: networking.k8s.io/v1beta1
    
      - host: api.testcompany.com
        http:
          paths:
          - backend:
              serviceName: testcompany-svc
              servicePort: test-http
    

Все зеленое и вроде бы работает, но когда я пытаюсь перейти по URL-адресу, я получаю This site can’t be reached


Обновление 1

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  namespace: staging
  name: ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: front.stagingtestcompany.com
    http:
      paths:
      - backend:
          serviceName: testcompanyfront-svc
          servicePort: testcompanyfront-http

  - host: api.stagingtestcompanysrl.com
    http:
      paths:
      - backend:
          serviceName: testcompanynodeapi-svc
          servicePort: testcompanyapi-http

comment
Вы можете позвонить в вашу службу внутри страны? Вы можете использовать внутренний IP-адрес узла и порт узла, чтобы проверить его. Кроме того, убедитесь, что у модуля есть контейнер, прослушивающий ваш TCP-порт 3001. И последнее, ваш диапазон портов узлов находится в диапазоне 30000-32767 или вы его настраиваете? Для получения дополнительной информации выполните эту команду: Kubectl get service -o yaml   -  person Milad Tabrizi    schedule 15.11.2020
comment
Вы пытались напрямую связаться с общедоступным IP-адресом вместо имени хоста? с помощью завитка вы можете установить такой хост curl -H "Host: api.testcompany.com" <IP>, чтобы избежать задержки DNS или неправильной настройки   -  person guillaume blaquiere    schedule 15.11.2020
comment
Что ingress-controller вы установили? Не могли бы вы дать ссылку? Это ingress-nginx или, может быть, kubernetes-ingress? Не могли бы вы также поделиться всем манифестом ingress, чтобы мы могли видеть все аннотации и т. д.? +1 к вышеуказанным вопросам. Работает ли он правильно, когда вы curl напрямую указываете IP-адрес службы?   -  person mario    schedule 17.11.2020
comment
@Milad, спасибо за ваш комментарий. Порты из nodeport находятся в диапазоне по умолчанию. Локально работает, но домена локально у меня нет. Спасибо за ваш комментарий он полезен!   -  person agusgambina    schedule 18.11.2020
comment
@guillaumeblaquiere спасибо за ваш комментарий. Если я попытаюсь получить доступ к внешнему IP-адресу ingress-nginx-controller, у меня будет 404.   -  person agusgambina    schedule 18.11.2020
comment
@Марио спасибо за комментарий. Я обновил вопрос информацией о манифесте. Я портировал модуль и вижу, что URL-адрес работает локально. Я что-то не так делаю с входом и доменом (или чего-то не хватает) спасибо!   -  person agusgambina    schedule 18.11.2020


Ответы (1)


Вы должны проверить это, чтобы:

  1. ваша служба, модуль, вход находятся в одном пространстве имен: kubectl get all -n staging
  2. ваш модуль прослушивает порт 3001: запустите его локально, если можете, или используйте kubectl port-forward pods/[pod-name] -n staging 3001:3001 и попробуйте локально с http://localhost:3001/...
  3. ваша служба правильно достигает вашего модуля: используйте kubectl port-forward service/testcompany-svc -n staging 3001:3001 и попробуйте локально с http://localhost:3001/...
  4. проверьте любые другие правила спецификации Ingress перед тем, что вы опубликовали
  5. проверьте правила брандмауэра в вашей сети VPC, они должны разрешать трафик из Google LB
person Fausto Fusaro    schedule 17.11.2020
comment
спасибо за ответ до шага 3 все работает, я должен проверить правила спецификации входа и брандмауэр. спасибо - person agusgambina; 18.11.2020
comment
Спасибо @FaustoFusaro, ваш ответ действительно помог все проанализировать. Чего мне не хватало, так это настроить субдомены в DNS сети CGP. Спасибо - person agusgambina; 22.11.2020