Nginx входящие журналы контроллера постоянно говорят мне, что у меня неверная информация о модуле - PullRequest
0 голосов
/ 16 января 2020

Я использую два узла в кластере kubernetes. Я могу развернуть свои микросервисы с 3 репликами и их сервис. Теперь я пытаюсь использовать входной контроллер nginx для предоставления моего сервиса, но я получаю эту ошибку из журналов:

неожиданная ошибка при получении информации о модуле: невозможно получить информацию о POD (отсутствует POD_NAME или POD_NAMESPACE переменная окружения)

Я установил пространство имен разработки в моем кластере, где развернут мой микросервис, а также контроллер nginx. Я не понимаю, как nginx забирает мои модули или как я передаю имя модуля или пространство имен pod_name.

вот мой nginx контроллер:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-controller
spec:
  replicas: 1
  selector:
    matchLabels:
      name: nginx-ingress
  template:
    metadata:
      labels:
        name: nginx-ingress
    spec:
      containers:
        - name: nginx-ingress-controller
          image: quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.27.0
          args:
            - /nginx-ingress-controller
            - --configmap=$(POD_NAMESPACE)/nginx-configuration
          env:
            - name: mycha-deploy
              valueFrom: 
                fieldRef:
                  fieldPath: metadata.name
          ports:
          - name: http
            containerPort: 80
          - name: https
            containerPort: 443

и вот мое развертывание:

#dDeployment
apiVersion: apps/v1
kind:  Deployment
metadata:
  name: mycha-deploy
  labels:
    app: mycha-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: mycha-app
  template:
    metadata:
      labels:
        app: mycha-app
    spec:
      containers:
        - name: mycha-container
          image: us.gcr.io/##########/mycha-frontend_kubernetes_rrk8s
          ports:
          - containerPort: 80

спасибо

Ответы [ 2 ]

0 голосов
/ 17 января 2020

Чтобы выставить свой сервис с помощью Nginx Ingress, вам необходимо настроить его раньше.

Следуйте руководству по установке для вашей установки kubernetes.

Вы также нужна служба для «группировки» контейнеров вашего приложения.

В Kubernetes служба - это абстракция, которая определяет логический набор модулей и политику доступа к ним. их (иногда этот шаблон называется микросервисом). Набор модулей, предназначенных для службы, обычно определяется селектором ... Например, рассмотрим серверную часть обработки изображений без сохранения состояния, которая работает с 3 репликами. Эти реплики взаимозаменяемы - внешним пользователям все равно, какой бэкэнд они используют. Хотя фактические блоки, составляющие набор бэкэндов, могут измениться, клиенты внешнего интерфейса не должны знать об этом и не должны сами отслеживать набор бэкэндов. Сервисная абстракция позволяет эту развязку.

Как видите, служба обнаружит ваши контейнеры на основе селектора меток , настроенного в вашем развертывании.

Кому проверьте селектор меток контейнера: kubectl get pods -owide -l app=mycha-app

Служба yaml

Примените следующее yaml, чтобы создать службу для своего развертывания:

apiVersion: v1
kind: Service
metadata:
  name: mycha-service
spec:
  selector:
    app: mycha-app <= This is the selector
  ports:
    - protocol: TCP
      port: 8080
      targetPort: 80

Проверьте, создана ли служба с помощью kubectl get svc .

Протестируйте приложение, используя переадресацию портов с рабочего стола на http://localhost: 8080 :

kubectl port-forward svc/mycha-service 8080:8080

nginx -ingress yaml

Последняя часть - nginx - вход . Предположим, ваше приложение имеет URL mycha-service.com и только путь root '/':

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: ingress-mycha-service
  annotations:
    kubernetes.io/ingress.class: "nginx"
spec:
  rules:
  - host: mycha-service.com <= app url
    http:
      paths:
      - path: /
        backend:
          serviceName: mycha-service <= Here you define what is the service that your ingress will use to send the requests.
          servicePort: 80

Проверьте вход: kubectl get ingress

NAME                    HOSTS                           ADDRESS         PORTS     AGE
ingress-mycha-service   mycha-service.com               XX.X.X.X   80        63s

Теперь вы смог получить доступ к вашему приложению, используя url mycha-service.com и адрес, отображаемый командой выше.

Надеюсь, это поможет =)

0 голосов
/ 16 января 2020

Ваш nginx развертывание входного контроллера yaml выглядит неполным и не имеет ниже среди многих других элементов.

           env:
            - name: POD_NAME
              valueFrom:
                fieldRef:
                  fieldPath: metadata.name
            - name: POD_NAMESPACE
              valueFrom:
                fieldRef:
                  fieldPath: metadata.namespace

Следуйте установке docs и используйте yamls из здесь

...