конфигурация nodeport, но kubernetes все еще дает диапазон портов - PullRequest
0 голосов
/ 08 апреля 2020

Я объявил службу в режиме nodePort . но есть кое-что, чего я не понимаю может я запутался. nodePort , перенаправленный на порт службы и полученный на targetPort модулем.

apiVersion: v1
    kind: Service
    metadata:
      name: frontend
      labels:
        app: {{ .Release.Name }}
        product: {{ .Values.product }}
        environment: {{ .Values.environment }}
        version: {{ .Values.version }}
        component: frontend
    spec:
      type: NodePort
      ports:
      - port: 6001
        targetPort: 6001
        protocol: TCP
      selector:
        app: countly-frontend

при перечислении служб на kubernetes я вижу это:

service/countly-frontend        NodePort       10.xx.xx.12    <none>        6001:31145/TCP    110s

обычно я должен видеть 6001: 6001 , а не 6001: 31145 ? Приложение прослушивает порт 6001, как вы уже догадались.

Ответы [ 3 ]

0 голосов
/ 08 апреля 2020

Так работает нодпорт сервиса kubernetes. Служба NodePort связывается с произвольным портом в диапазоне 30000-32767. Если вы хотите указать порт связывания, добавьте атрибут nodePort , чтобы установить его ( docs ), но он должен находиться в требуемом диапазоне. Для примера я выбираю 30007:

apiVersion: v1
kind: Service
metadata:
  name: frontend
  labels:
    app: {{ .Release.Name }}
    product: {{ .Values.product }}
    environment: {{ .Values.environment }}
    version: {{ .Values.version }}
    component: frontend
spec:
  type: NodePort
  ports:
  - port: 6001
    targetPort: 6001
    protocol: TCP
    nodePort: 30007
  selector:
    app: countly-frontend
0 голосов
/ 09 апреля 2020

Позвольте мне уточнить некоторые неправильные представления:


Вы не можете изменить диапазон портов nodePort для управляемого кластера Kubernetes, например GKE.


Слово о nodePort из официальной документации Kubernetes:

NodePort: Предоставляет Сервис для каждого IP-узла в порту stati c (NodePort). Служба ClusterIP, к которой автоматически создается маршрут службы NodePort. Вы сможете связаться со службой NodePort извне кластера, запросив <NodeIP>:<NodePort>.

- Kubernetes.io: Услуги

* Диапазон портов 1029 *nodePort от 30000 до 32767.

То, что вы видите здесь:

, когда я перечисляю службы на kubernetes, я вижу это:

service/countly-frontend        NodePort       10.xx.xx.12    ><none>        6001:31145/TCP    110s

В частности: 6001:31145/TCP is правильный .

Пример:

Предположим, что есть модуль с приложением, работающим на порту 50001.

Это service.yaml вышеуказанного приложения:

apiVersion: v1
kind: Service
metadata:
  name: hello-service
spec:
  selector:
    app: hello
  ports:
    - name: hello-port
      port: 5678 # CLUSTER-IP PORT
      targetPort: 50001 # PORT WHICH YOUR APPLICATION IS RUNNING ON
      nodePort: 30051 # NODEPORT PORT 
  type: NodePort

Выход $ kubectl get services:

NAME               TYPE           CLUSTER-IP    EXTERNAL-IP                                           PORT(S)           AGE
hello-service      NodePort       10.86.1.195   <none>                                                5678:30051/TCP   25h

У вас будет доступ к вашему приложению по:

  • NodeIP:NodePort(30051) (внешний доступ)
  • ClusterIP:port(5678) (внутренний доступ)
  • PodIP:targetPort(50001) (внутренний доступ)

Если вы хотите выставить свое приложение на порт 6001 для внешнего использования, вы можете попробовать тип сервиса LoadBalancer.

Есть ответы на StackOverflow, которые углубляются в эту топи c:

Пожалуйста, ознакомьтесь с официальной документацией о предоставлении приложений в кластере GKE: Cloud.google. com: движок Kubernetes: раскрытие приложений

Пожалуйста, дайте мне знать, если у вас есть какие-либо вопросы по этому поводу.

0 голосов
/ 08 апреля 2020

Не уверен, что это может сработать:

ports:
    - protocol: TCP
      port: 6001
      targetPort: 6001

Или если вы можете попробовать изменить targetPort на nodePort в вашем исходном

...