Миникуб с входным примером не работает - PullRequest
0 голосов
/ 25 октября 2019

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

$ kubectl get ingress
NAME              HOSTS              ADDRESS     PORTS   AGE
example-ingress   hello-world.info   10.0.2.15   80      12m

$ minikube ip
192.168.99.101

Когда я пытаюсь подключиться к IP-адресу Minikube (используя адрес напрямую, а не добавляя его в мой локальный файл hosts)Я получаю ответ «Не найдено» от NGINX:

$ curl http://`minikube ip`/
<html>
    <head><title>404 Not Found</title></head>
    <body>
        <center><h1>404 Not Found</h1></center>
        <hr><center>openresty/1.15.8.1</center>
    </body>
</html>

Когда я пытаюсь подключиться к IP-адресу, связанному с входным контроллером, он просто зависает.

Должен ли яожидать, что адреса будут такими же, как указано в документе K8s?

Некоторая дополнительная информация:

$ kubectl get nodes -o wide
NAME       STATUS   ROLES    AGE     VERSION   INTERNAL-IP   EXTERNAL-IP   OS-IMAGE              KERNEL-VERSION   CONTAINER-RUNTIME
minikube   Ready    master   2d23h   v1.16.0   10.0.2.15     <none>        Buildroot 2018.05.3   4.15.0           docker://18.9.9

$ kubectl get ingresses example-ingress -o yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"networking.k8s.io/v1beta1","kind":"Ingress","metadata":{"annotations":{"nginx.ingress.kubernetes.io/rewrite-target":"/$1"},"name":"example-ingress","namespace":"default"},"spec":{"rules":[{"host":"hello-world.info","http":{"paths":[{"backend":{"serviceName":"web","servicePort":8080},"path":"/"}]}}]}}
    nginx.ingress.kubernetes.io/rewrite-target: /$1
  creationTimestamp: "2019-10-28T15:36:57Z"
  generation: 1
  name: example-ingress
  namespace: default
  resourceVersion: "25609"
  selfLink: /apis/extensions/v1beta1/namespaces/default/ingresses/example-ingress
  uid: 5e96c378-fbb1-4e8f-9738-3693cbce7d9b
spec:
  rules:
  - host: hello-world.info
    http:
      paths:
      - backend:
          serviceName: web
          servicePort: 8080
        path: /
status:
  loadBalancer:
    ingress:
    - ip: 10.0.2.15

1 Ответ

0 голосов
/ 29 октября 2019

Я воспроизвел ваш сценарий в среде Linux (на GCP), и у меня также есть разные IP-адреса:

user@bf:~$ minikube ip
192.168.39.144

user@bf:~$ kubectl get ingresses
NAME              HOSTS   ADDRESS           PORTS   AGE
example-ingress   *       192.168.122.173   80      30m

Ваша проблема не связана с тем, что у вас разные IP-адреса. Это руководство указывает нам создать вход со следующим правилом:

spec:
  rules:
  - host: hello-world.info

Это правило сообщает службе входа, что ожидается запись DNS с именем hello-world.info. Если вы немного больше последуете руководству, оно попросит вас создать запись в файле хостов, указывающую на ваш IP-адрес входа или IP-адрес мини-куба.

Примечание: Если вы работаетеMinikube локально, используйте minikube ip, чтобы получить внешний IP. IP-адрес, отображаемый во входном списке, будет внутренним IP-адресом. Источник: Настройка Ingress на Minikube с помощью NGINX Ingress Controlle

Если вы хотите свернуть IP-адрес вместо DNS-имени, вам нужно удалить правило хоста из вашего входа. Это должно выглядеть следующим образом:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: example-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - http:
     paths:
     - path: /
       backend:
         serviceName: web
         servicePort: 8080

Примените изменения:

user@bf:~$ kubectl apply -f example-ingress.yaml

И сверните IP-адрес, используя опции -Lk, чтобы обойти проблемы, связанные с безопасными соединениями.

user@bf:~$ curl -Lk 192.168.39.144
Hello, world!
Version: 1.0.0
Hostname: web-9bbd7b488-l5gc9
...