Пустой доступ к куберне АДРЕС

Я попытался настроить вход на моем кластере kubernetes. Я следовал документации, чтобы установить входной контроллер, и выполнил следующие команды

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/mandatory.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/provider/baremetal/service-nodeport.yaml

После этого работали default-http-backend и nginx-ingress-controller:

ingress-nginx   default-http-backend-846b65fb5f-6kwvp      1/1       Running   0          23h       192.168.2.28   node1
ingress-nginx   nginx-ingress-controller-d658896cd-6m76j   1/1       Running   0          6m        192.168.2.31   node1

Я попытался протестировать вход и развернул следующую службу:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: echoserver-deploy
spec:
  replicas: 2
  selector:
    matchLabels:
      app: echo
  template:
    metadata:
      labels:
        app: echo
    spec:
      containers:
        - name: my-echo
          image: gcr.io/google_containers/echoserver:1.8
---
apiVersion: v1
kind: Service
metadata:
  name: echoserver-svc
spec:
  selector:
    app: echo
  ports:
    - protocol: TCP
      port: 8080
      targetPort: 8080

И следующий вход:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: happy-ingress
  annotations:
    INGRESS.kubernetes.io/rewrite-target: /
spec:
  rules:
    - host: happy.k8s.io
      http:
        paths:
          - path: /echoserver
            backend:
              serviceName: echoserver-svc
              servicePort: 8080

Когда я выполнил команду 'kubectl get ing', я получил:

NAME            HOSTS          ADDRESS   PORTS     AGE
happy-ingress   happy.k8s.io             80        14m

Мне не удалось разрешить АДРЕС, и я не могу понять, в чем проблема, потому что все модули работают. Можете ли вы дать мне подсказку, в чем может быть проблема?

Спасибо

Ответ 1

Вы должны включить ingress addons с помощью следующей команды перед созданием правил входа. Вы также можете включить его перед выполнением любой другой команды

$ minikube addons enable ingress
ingress was successfully enabled

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

kubectl get pods -n kube-system | grep nginx-ingress-controller

nginx-ingress-controller-5984b97644-jjng2   1/1       Running   2          1h

enter image description here Для Deployment вы должны указать containerPort, а для Service вы должны указать протокол http.

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: echoserver-deploy
spec:
  replicas: 2
  selector:
    matchLabels:
      app: my-echo
  template:
    metadata:
      labels:
        app: my-echo
    spec:
      containers:
        - name: my-echo
          image: gcr.io/kubernetes-e2e-test-images/echoserver:2.1
          ports:
          - containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
  name: echoserver-svc
spec:
  selector:
    app: my-echo
  ports:
  - protocol: TCP
    port: 80
    targetPort: 8080
    name: http

Для правила входа измените порт servicePort с 8080 на 80 порт http по умолчанию.

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: happy-ingress
  annotations:
    INGRESS.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: happy.k8s.io
    http:
      paths:
      - path: /echoserver
        backend:
          serviceName: echoserver-svc
          servicePort: 80

Теперь примените эти файлы и создайте ваши правила, сервис и правила входа. Подождите немного, потребуется несколько минут, чтобы получить АДРЕС для вашего правила входа. enter image description here Теперь вы можете посетить свой сервис, используя адрес minikube ip, но не по имени хоста. Для этого вам необходимо добавить хост и соответствующий IP-адрес в файл /etc/hosts. Итак, откройте файл /etc/hosts в вашем любимом редакторе и добавьте ниже строку, где находится фактический IP вашего мини-куба

<minikube_ip> happy.k8s.io

Теперь вы получаете доступ к своему сервису, используя имя хоста. Убедитесь, что следовали за командой

curl http://happy.k8s.io/echoserver

Ответ 2

Я не знаю, поможет ли это, но у меня была такая же проблема. Я не устанавливал входной контроллер или что-то подобное, как говорили некоторые люди на Github, я только что создал Ingress, чтобы иметь возможность указать свой поддомен для другой службы, и сначала у моего Ingress не было IP-адреса (он был пустым).

NAME      HOSTS                            ADDRESS   PORTS   AGE
ingress   delivereo.tk,back.delivereo.tk             80      39s

Я думаю, это потому, что мои 2 службы для интерфейсного приложения и серверного API имели тип LoadBalancer. Я изменил его на NodePort, потому что им не нужен внешний ip теперь, когда входной контроллер будет управлять тем, что URL идет куда.

И когда я изменил тип своих услуг на NodePort, через 2 или 3 минуты появился IP-адрес Ingress. Когда я указал свой Cloudflare DNS на новый входящий IP, я протестировал свой поддомен, и он заработает!

ПЕРЕД

apiVersion: v1
kind: Service
metadata:
  name: delivereotk
spec:
  ports:
    - port: 80
  selector:
    app: delivereotk
  type: LoadBalancer

ПОСЛЕ

apiVersion: v1
kind: Service
metadata:
  name: delivereotk
spec:
  ports:
    - port: 80
  selector:
    app: delivereotk
  type: NodePort

Ingress

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress
spec:
  rules:
  - host: delivereo.tk
    http:
      paths:
        - backend:
            serviceName: delivereotk
            servicePort: 80
  - host: back.delivereo.tk
    http:
      paths:
        - backend:
            serviceName: backdelivereotk
            servicePort: 80

Ответ 3

Ваше hostname happy.k8s.io должно разрешить фактический IP-адрес контроллера nginx-ingress, который указывает на фронт вашего балансировочного устройства.

Вы можете проверить, под каким IP-адресом работает кластер:

bash-3.2$ kubectl cluster-info
Kubernetes master is running at https://192.168.1.100:8443
KubeDNS is running at https://192.168.1.100:8443/api/v1/namespaces/kube- 
system/services/kube-dns:dns/proxy

Проверьте входной контроллер для вашего кластера с помощью curl

bash-3.2$ curl http://192.168.1.100:8080
default backend - 404

В конце вы должны просто добавить запись домена в /etc/hosts:

192.168.1.100   happy.k8s.io

Ответ 4

В официальном документе говорится:

Поскольку Сервисы NodePort не получают LoadBalancerIP, назначенный определение, контроллер входа NGINX не обновляет статус Входящие объекты, которыми он управляет

Вы развернули контроллер NGINX Ingress, как описано в руководстве по установке, поэтому нормально, чтобы ваш АДРЕС был пуст!

Вместо этого внешний клиент должен добавить NodePort, выделенный для службы ingress-nginx, к HTTP-запросам.

пс. Этот вопрос не о миникубе