Nginx Ingress не обслуживает

Я новичок в k8s, у меня есть файл развертывания, который находится ниже

apiVersion: apps/v1
kind: Deployment
metadata:
  name: jenkins-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      component: web
  template:
    metadata:
      labels:
        component: web
    spec:
      containers:
        - name: jenkins
          image: jenkins
          ports:
            - containerPort: 8080
            - containerPort: 50000

Мой служебный файл выглядит следующим образом:

apiVersion: v1
kind: Service
metadata:
   name: jenkins-svc
spec:
   type: ClusterIP
   ports:
   - port: 80
     targetPort: 8080
     name: http
   selector:
      component: web

Мой файл Ingress

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: jenkins-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: jenkins.xyz.com
    http:
      paths:
      - path: /
        backend:
          serviceName: jenkins-svc
          servicePort: 80


Я использую проект nginx ingress, и мой кластер создан с использованием kubeadm с 3 узлами nginx ingress

Сначала я выполнил обязательную команду

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/mandatory.yaml

когда я пытался нажать jenkins.xyz.com, это не сработало, когда я попробовал команду

  kubectl get ing

Ресурс ing не получает назначенный ему IP-адрес


person pawarchinmay27    schedule 29.06.2019    source источник
comment
Вы обновили свою DNS-запись, чтобы ваш jenkins.xyz.com был преобразован в IP-адрес nginx-ingress-controller? В чем ошибка при переходе на jenkins.xyz.com?   -  person Fei    schedule 29.06.2019
comment
Здравствуйте, я не знаю о записи DNS, я проверю ее, когда нажму jenkis.xyz.com, у меня тайм-аут 504 Gateway   -  person pawarchinmay27    schedule 29.06.2019
comment
Недавно я увидел этот вопрос stackoverflow.com/questions/52989993/ и применил команду kubectl apply -f raw.githubusercontent.com/kubernetes/ingress-nginx/master/, а затем, когда я запустил команду kubectl get svc -n ingress-nginx, я вижу IP-адрес кластера и порты 80: 30859, 443: 31064 и внешний IP-адрес отсутствует   -  person pawarchinmay27    schedule 29.06.2019
comment
Да, вам нужно будет использовать тип Load-Balancer для вашей службы, чтобы ваш облачный провайдер выдал вам IP. В вашей конфигурации это служба NodePort, поэтому ей не будет назначен IP. Для понимания вы можете взглянуть на мой ответ здесь: stackoverflow.com/questions/54784460/aws-vpc-k8s-load-balancing/   -  person Fei    schedule 29.06.2019
comment
Здравствуйте, извините, я полностью понимаю. Нужно ли мне в моем файле Jenkins-Service изменить тип службы с ClusterIP на LoadBalancer? Я пытался это сделать, но столкнулся с той же проблемой   -  person pawarchinmay27    schedule 29.06.2019
comment
Казалось, что вам нужно немного прочитать эти концепции, прежде чем продолжить. Прочтите официальный документ: kubernetes.io/docs/concepts/services-networking/ сервис. Суть в том, что вам нужно, чтобы весь ваш трафик шел в модуль nginx-ingress-controller, а модуль nginx-ingress-controller будет маршрутизировать в зависимости от вашего настроенного входа. Ingress - это просто конфиг (не под). Думайте об этом как о блоке местоположения в вашей конфигурации nginx.   -  person Fei    schedule 29.06.2019
comment
Где работает ваш кластер Kubernetes? Вы не завершили установку nginx ingress. В дополнение к mandatory.yaml вам необходимо развернуть один из конкретных манифестов поставщика по адресу kubernetes.github.io/ingress-nginx/deploy/.   -  person Andy Shinn    schedule 30.06.2019
comment
Здравствуйте, я запускаю свой кластер на виртуальных машинах, поэтому мне придется применить yaml для голого металла, верно?   -  person pawarchinmay27    schedule 30.06.2019


Ответы (2)


Входящий ресурс - это не что иное, как конфигурация обратного прокси (Ingress controller).

Это нормально, что Ingress не получает назначенный IP-адрес.

Что вам нужно сделать, так это подключиться к экземпляру контроллера входящего трафика.

Для этого вам необходимо понять, как они представлены в вашем кластере.

Учитывая YAML, который, как вы утверждаете, вы использовали для запуска контроллера входящего трафика, нет никаких признаков воздействия на внешнюю сеть.

Вам нужно, по крайней мере, определить Service, чтобы предоставить доступ к вашему контроллеру (может быть балансировщиком нагрузки, если провайдер, в который вы помещаете свой кластер, поддерживает его), вы можете использовать HostNetwork: true или NodePort.

Чтобы использовать последний вариант (NodePort), вы можете применить этот YAML:

https://github.com/kubernetes/ingress-nginx/blob/master/deploy/static/provider/baremetal/service-nodeport.yaml.

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

https://kubernetes.io/docs/concepts/services-networking/ingress/ < / а>

person whites11    schedule 30.06.2019

Чтобы получить доступ к локальным POD кластера Kubernetes, необходимо создать NodePort. NodePort опубликует вашу службу на каждом узле, используя свой общедоступный IP-адрес и порт. Затем вы можете получить доступ к службе, используя любой из IP-адресов кластера и назначенный порт.

Определение NodePort в Kubernetes:

Kubernetes NodePort и прокси

apiVersion: v1
kind: Service
metadata:
  name: nginx-service-np
  labels:
    name: nginx-service-np
spec:
  type: NodePort
  ports:
    - port: 8082        # Cluster IP, i.e. http://10.103.75.9:8082
      targetPort: 8080  # Application port
      nodePort: 30000   # (EXTERNAL-IP VirtualBox IPs) i.e. http://192.168.50.11:30000/ http://192.168.50.12:30000/ http://192.168.50.13:30000/
      protocol: TCP
      name: http
  selector:
    app: nginx 

См. Полный пример с исходным кодом на странице Создание кластера Kubernetes с Vagrant и Ansible (без Minikube ).

Контроллер входящего трафика nginx также можно заменить на Istio, если вы хотите воспользоваться преимуществами архитектуры service mesh для:

  • Трафик с балансировкой нагрузки, внешний или внутренний
  • Сбои в управлении, повторные попытки, маршрутизация
  • Применяйте ограничения и отслеживайте сетевой трафик между сервисами
  • Безопасное общение

См. Установка Istio в Kubernetes под VirtualBox (без Minikube) .

person Javier Ruiz    schedule 01.07.2019