Доступ к приложению вне кластера kubernetes с помощью миникуба - PullRequest
1 голос
/ 04 марта 2020

Я новичок в kubernetes, я пытаюсь изучить его с помощью Minikube, и у меня возникла проблема с доступом к приложениям вне кластера. Я создал развертывание:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx

  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
        - containerPort: 8080

Чтобы получить к нему доступ, мне нужно выставить его декоративно или обязательно. В обязательном порядке это работает:

kubectl expose deployment nginx-deployment --port 80 --type NodePort

Когда я создаю службу декларативно, я всегда получаю ошибка соединения отказано :

apiVersion: v1

kind: Service
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  type : NodePort
  ports:
  - port : 8080
    nodePort : 30018
    protocol : TCP
  selector:
    app: nginx

curl -k http://NodeIP: NodePort возвращает:

curl: (7) Не удалось подключиться к IP-порту узла NodePORT: соединение отклонено

Ответы [ 2 ]

1 голос
/ 05 марта 2020

Как предложил @Ansil, ваш nginx должен быть настроен на прослушивание порта 8080, если вы хотите сослаться на этот порт в своем определении Service. По умолчанию он прослушивает порт 80.

Вы не можете заставить его слушать другой порт, например, 8080, просто указав containerPort в своем определении Deployment, как в вашем примере:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx

  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
        - containerPort: 8080

Вы можете легко проверить это самостоятельно подключившись к таким Pod:

kubectl exec -ti <nginx-pod-name> -- /bin/bash

Как только вы там окажетесь, запустите:

ss -ntlp

И вы должны увидеть, на каком порту ваш nginx фактически прослушивает.

Кроме того, вы можете:

cat /etc/nginx/conf.d/default.conf

Он также сообщит вам, на каком порту ваш nginx настроен для прослушивания. Это все. Это действительно просто. Вы изменили containerPort на 8080, но внутри вашего контейнера на самом деле ничего не слушает такой порт.

Вы все еще можете выставить его как Service (независимо от декларативного или обязательного характера), но это ничего не изменит в конце концов он указывает на неправильный порт в вашем контейнере, который ничего не слушает, и вы увидите сообщение, подобное этому:

curl: (7) Failed to connect to 10.1.2.3 port 30080: Connection refused
0 голосов
/ 04 марта 2020

После создания службы в мини-кубе ее можно открыть вне виртуальной машины minikube (хост-машины), используя команду

minikube service SERVICE_NAME

См. https://minikube.sigs.k8s.io/docs/reference/commands/service/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...