Kubernetes NodePort не работает правильно - PullRequest
0 голосов
/ 14 октября 2019

У меня есть кластер Kubernetes кластер на локальной машине и один Raspberry Pi. Чтобы протестировать кластер, я создал развертывание nginx и сервис, к которому я хочу получить доступ как NodePort. Но Бог знает почему, я не могу получить доступ к указанному сервису. Ниже приведены мои файлы развертывания и обслуживания.

kubectl get nodes

NAME      STATUS                        ROLES    AGE    VERSION
anima     Ready                         master   7d5h   v1.16.1
bahamut   Ready                         <none>   7d4h   v1.16.1

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

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        resources:
          limits:
            memory: "128Mi"
            cpu: "500m"
        ports:
        - containerPort: 80
      nodeSelector:
        kubernetes.io/hostname: bahamut


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

После kubectl get pods -o wide:

NAME                     READY   STATUS    RESTARTS   AGE     IP            NODE      NOMINATED NODE   READINESS GATES
nginx-67c8c4b564-6x7g5   1/1     Running   0          6m21s   10.244.1.13   bahamut   <none>           <none>

Мои развертывания, kubectl get deployments -o wide:

NAME    READY   UP-TO-DATE   AVAILABLE   AGE     CONTAINERS   IMAGES         SELECTOR
nginx   1/1     1            1           7m55s   nginx        nginx:latest   app=nginx

Мои услуги, kubectl get svc -o wide:

NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE     SELECTOR
kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP          7d5h    <none>
nginx        NodePort    10.102.203.77   <none>        3030:30508/TCP   8m54s   app=nginx

И, наконец, kubectl get endpoints -o wide:

NAME         ENDPOINTS           AGE
kubernetes   192.168.25.4:6443   7d5h
nginx        10.244.1.13:80      9m41s


Мой локальный IP-адрес мастера Kubernetes - 192.168.25.4, а мой малиновый IP - 192.168.25.6. После развертывания службы я попытался:

curl 192.168.25.6:3030
curl: (7) Failed to connect to 192.168.25.6 port 3030: Connection refused

curl 192.168.25.6:80
curl: (7) Failed to connect to 192.168.25.6 port 80: Connection refused

curl 192.168.25.6:30508 (hangs)

Также попытался использовать IP главного узла, IP-адрес службы и указанный IP-адрес кластера, но ничего не работает.

РЕДАКТИРОВАТЬ

Это работает, если я использую hostNetwork=true при развертывании и получаю доступ к нему, используя локальный IP-адрес узла на порту контейнера, но, очевидно, это не то, что я хочу. Я хочу понять, почему Kubernetes не позволяет мне получить доступ к контейнеру через сервис.

Ответы [ 3 ]

3 голосов
/ 14 октября 2019

NodePort предоставляет Сервис для каждого IP-узла в статическом порту (NodePort), в вашем случае это 30508. Пожалуйста, смотрите более подробную информацию здесь .

И , этот поделится более подробной информацией о кластерах из чистого металла.

1 голос
/ 14 октября 2019

port должно быть значением порта, предоставляемого службой, 80.

Если вы хотите, чтобы порт узла был привязан к определенному значению, измените вашу службу на что-то вроде:

  - port: 80
    nodePort: 30030

обратите внимание, что диапазон портов узла равен 30000 - 32767, после этого вы сможете запросить:

curl <node>:30030
0 голосов
/ 14 октября 2019

Проблема была с фланелевым интерфейсом. После ip link delete flannel.1 и перезапуска фланелевых капсул сервис начал работать без нареканий.

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