Nginx Ingress не работает - PullRequest
0 голосов
/ 29 июня 2019

Я новичок в 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

Мой входной файл

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-адрес

Ответы [ 2 ]

1 голос
/ 30 июня 2019

Входной ресурс - это не что иное, как конфигурация обратного прокси (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/

0 голосов
/ 01 июля 2019

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

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

Kubernetes NodePort and proxy

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 , если вы хотите использовать архитектуру сервисной сетки для:

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

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

...