Как открыть сервис Kubernetes для определенного Nodeport? - PullRequest
0 голосов
/ 26 сентября 2018

Я создал модуль с приведенным ниже определением yaml.

apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
  labels:
    app: myapp
spec:
  containers:
  - name: myapp-container
    image: praveensripati/docker-demo:1.2
    ports:
    - containerPort: 3000

А теперь я открываю модуль, который создает службу.

kubectl expose pod myapp-pod --type=NodePort

Порт 3000 на контейнеревыставлен на порт 31728 на узлах.И я могу получить доступ к странице с помощью curl на порту 31728.

kubectl get service myapp-pod
NAME        TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
myapp-pod   NodePort   10.107.254.254   <none>        3000:31728/TCP   5s

На этот раз я хотел представить службу не случайный порт, а на порту 80. И поэтому я указываю номер порта как80, используя --port.Детали обслуживания немного странные.Это говорит о том, что порт 80 на контейнере открыт для порта 31316 на узлах.Кроме того, я могу получить доступ к странице с помощью curl на произвольном порту (в данном случае 31316), а не на порту 80.

kubectl expose pod myapp-pod --type=NodePort --target-port=3000 --port=80

kubectl get service myapp-pod
NAME        TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
myapp-pod   NodePort   10.105.123.73   <none>        80:31316/TCP   12s

Я не могу открыть службу на определенном порту и не наслучайный порт.Я попробовал несколько комбинаций и прочитал документацию по k8s, но безуспешно.

Как мне предоставить службу на определенном порту вместо случайного порта?

Ответы [ 5 ]

0 голосов
/ 14 апреля 2019

Если существующая служба Dashboard уже существует, удалите ее.

kubectl delete service kubernetes-dashboard -n kube-system

Представьте развертывание Dashboard как NodePort.

kubectl expose deployment kubernetes-dashboard -n kube-system --type=NodePort

Вышеуказанное назначит случайный порт> = 30000. Поэтому используйте команду Patch, чтобы назначить порт известному, неиспользуемому и желаемому порту> = 30000.

kubectl patch service kubernetes-dashboard --namespace=kube-system --type='json' --patch='[{"op": "replace", "path": "/spec/ports/0/nodePort", "value":30000}]'

Внимание!: Никогда не открывайте свою панель мониторинга публично без аутентификации.

0 голосов
/ 15 марта 2019

Если в вашем кластере нет поставщика LoadBalancer, вы можете указать externalIPs в IP-адресе сетевого интерфейса узлов.

Например:

apiVersion: v1
kind: Service
metadata:
  name: nginx
spec:   
  type: ClusterIP
  externalIPs:
    - 125.100.99.101 # Node1-IP
    - 125.100.99.102 # Node2-IP
    - 192.168.55.112 # Node2-IP2
  selector:
    pod: nginx
  ports:
    - name: http
      port: 80      
    - name: https
      port: 443      

Thisбудет прослушивать 80 и 443 на указанном узле и пересылать в службу nginx.

0 голосов
/ 27 сентября 2018

Я постараюсь ответить на ваш запрос здесь.

Кроме того, я могу получить доступ к странице с помощью curl на произвольном порту (в данном случае 31316), а не на порту 80.

-- Because, kubernetes exposed the port 31316 on the host (maps to the service) and hence it can be accessed on host:31316.

-- Service port is visible only within the kubernetes cluster. You can exec into a pod container and do a curl on servicename:service port instead of the NodePort.

Обратите внимание на условия - container port:, который слушает контейнер порта.Service port: порт, на котором служба kubernetes размещена на внутреннем ip кластера и сопоставлена ​​с портом контейнера.Nodeport: порт, отображаемый на хосте и сопоставленный со службой kubernetes.

0 голосов
/ 05 февраля 2019

мы можем выставить сервис Kubernetes на конкретный порт узла.

Значение порта должно быть между 30000-32767.

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

  1. NodePort

  2. LoadBalancer

Найдите приведенный ниже пример файла myservice.yaml:

apiVersion: v1
kind: Service
metadata:
  name: app1
spec:
  type: NodePort/LoadBalancer
  ports:
  - name: "80"
    port: 80
    nodePort: 32062
    targetPort: 80
  selector:
    appone: app1
    app: test

Примечание. В указанном выше файле yaml службы мы можем указать службувведите NodePort или Loadbalancer .

0 голосов
/ 26 сентября 2018

Ваш вопрос касается предоставления услуги типа NodePort для определенного порта.Для этого вам необходимо указать поле nodePort в ports в определении службы.

kind: Service
apiVersion: v1
metadata:
  name: my-service
spec:
  selector:
    app: myapp
  ports:
  - protocol: TCP
    port: 3000
    nodePort: 32321
  type: NodePort

Обратите внимание, что оно должно находиться в пределах заданного диапазона, указанного в конфигах.По умолчанию 30000-32767.Этот диапазон может быть указан в конфигах kube-apiserver с помощью опции --service-node-port-range.

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