Как я могу предоставить сервис на нескольких портах через HTTP во входе? - PullRequest
0 голосов
/ 28 марта 2019

У меня есть служба в Kubernetes, которую я должен выставить на нескольких портах по HTTP.Я использую Nginx-Ingress и смог успешно выставить свой сервис через порт 80. (http://serviceA.example.com --> service-a:80)

Однако я не могу использовать другой порт для Http, а затем порт 80. Как я могу сказать nginx-вход для прослушивания порта 7049.

Я уже пытался выставить порт 7049 в службе nginx и добавил аннотацию nginx.org/listen-ports: "80,7049" к контроллеру nginx.Ни один из них не работал для меня.

Я ожидаю следующий вывод:

http://serviceA.example.com --> service-a:80

http://serviceA.example.com:7049 --> service-a:7049

ingress-service.yml

apiVersion: v1
kind: Service
metadata:
  name: nginx-ingress
  namespace: nginx-ingress
spec:
  externalTrafficPolicy: Local
  type: LoadBalancer
  ports:
  - port: 80
    targetPort: 80
    protocol: TCP
    name: http
  - port: 443
    targetPort: 443
    protocol: TCP
    name: https
  selector:
    app: nginx-ingress

my-service.yml

apiVersion: v1
kind: Service
metadata:
  name: my-service
  labels:
    app: my-service
spec:
  ports:
  - port: 80
    targetPort: 80
    protocol: TCP
    name: http
  - port: 443
    targetPort: 443
    protocol: TCP
    name: https
  - port: 7049
    targetPort: 7049
    name: symbols
  selector:
    app: my-service

my-service-ingress.yml

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: my-service
spec:
  rules:
  - host: myservice.example.com
    http:
      paths:
      - path: /
        backend:
          serviceName: my-service
          servicePort: 80

Ответы [ 2 ]

2 голосов
/ 28 марта 2019

Ingress Object используется для предоставления приложения только для трафика HTTP и HTTPS.

Ingress, добавленный в Kubernetes v1.1, предоставляет маршруты HTTP и HTTPS извне кластера для служб внутри кластера. Маршрутизация трафика контролируется правилами, определенными для ресурса Ingress.

, что-это-вход

Вы можете использовать другой тип маршрутизации, такой как маршрутизация на основе пути или имени хоста, но номер порта для nginx будет 80 или & 443.

Если вы хотите выставить свое приложение на другом порту, отличном от 80 и 443, вам нужно использовать LoadBalancer type service

1 голос
/ 28 марта 2019

Если вам нужно выставить вход на нестандартный порт (т. Е. Кроме 80/443), вы можете использовать для этого тип услуги NodePort .По умолчанию тип службы NodePort открывает случайный порт на узле из диапазона 30000 - 32767 , где услуга становится достижимой.В таком случае вам нужно переопределить две вещи:

1) Чтобы переопределить диапазон портов узла по умолчанию, используйте следующий флаг при запуске вашего apiserver: --service-node-port-range=7000-9000

2) ПринудительноДля назначения конкретного порта в службе NodePort используйте следующее развертывание службы в файле .yaml

apiVersion: v1
kind: Service
metadata:
  labels:
    k8s-app: ingress-nginx
  name: ingress-nginx
  namespace: ingress-nginx
spec:
  ports:
  - name: http
    nodePort: 7049
    protocol: TCP
    port: 80
  selector:
    k8s-app: ingress-nginx
  type: NodePort
...