GKE Доступ к сервисам в одном контейнере с 2 открытыми портами - PullRequest
0 голосов
/ 01 марта 2020

У меня есть кластер GKE, статический IP-адрес c и контейнер / модуль, который предоставляет 2 порта: 8081 (UI https) и 8082 (WSS https). Я должен подключиться к "Utt Https" и "WSS Https" на одном IP. Служба "WSS Https" не имеет конечную точку проверки работоспособности.

Нужно ли мне использовать вход Isito, Consul, Nginx или какой-либо другой сервис sh для разрешить эти соединения на одном и том же IP с разными портами?

Возможно ли это вообще? enter image description here

То, что я пробовал :

  1. GCP global lb с 2 независимыми входными службами. Yaml для второго сервиса никогда не работает правильно, но я могу добавить другой резервный сервис через пользовательский интерфейс. Вход всегда возвращается к проверке работоспособности по умолчанию для службы «WSS Https», и она всегда вредна для здоровья.
  2. Изменен тип службы с NodePort на LoadBalancer со значением c ip. Это не позволит мне изменить проверку готовности и всегда возвращается обратно.
  3. GCP GLIB с 1 входом и 2 бэкэндами дает мне тот же сбой проверки работоспособности, что и выше
  4. TCP Proxy - не позволяет мне установить одну и ту же группу экземпляров.

Ниже приведены мои входные данные, службы и развертывания.

Входные данные

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: app-ingress
  namespace: myappnamespace
  annotations:
    kubernetes.io/ingress.global-static-ip-name: global-static-ip-name
  labels:
    app: appname
spec:
  backend:
    serviceName: ui-service
    servicePort: 8081
  tls:
  - hosts:
    - my-host-name.com
    secretName: my-secret
  rules:
  - host: my-host-name.com
    http:
      paths:
        - backend:
            serviceName: ui-service
            servicePort: 8081
  - host: my-host-name.com
    http:
      paths:
        - backend:
            serviceName: app-service
            servicePort: 8082

Службы

---
apiVersion: v1
kind: Service
metadata:
  labels:
    name: ui-service
  name: ui-service
  namespace: myappnamespace
  annotations:
    cloud.google.com/app-protocols: '{"ui-https":"HTTPS"}'
    beta.cloud.google.com/backend-config: '{"ports":{"8081":"cloud-armor"}}'
spec:
  selector:
      app: appname
  ports:
  - name: ui-https
    port: 8081
    targetPort: "ui"
    protocol: "TCP"
  selector:
    name: appname
  type: NodePort
---
apiVersion: v1
kind: Service
metadata:
  labels:
    name: app-service
  name: app-service
  namespace: myappnamespace
  annotations:
    cloud.google.com/app-protocols: '{"serviceport-https":"HTTPS"}'
    beta.cloud.google.com/backend-config: '{"ports":{"8082":"cloud-armor"}}'
spec:
  selector:
      app: appname
  ports:
  - name: serviceport-https
    port: 8082
    targetPort: "service-port"
    protocol: "TCP"
  selector:
    name: appname
  type: NodePort
---

Развертывание

apiVersion: apps/v1
kind: Deployment
metadata:
    name: appname
    namespace: myappnamespace
    labels:
        name: appname
spec:
    replicas:1
    selector:
        matchLabels:
            name: appname
    strategy:
        type: Recreate
    template:
        metadata:
            name: appname
            namespace: appnamespace
            labels:
                name: appname
        spec:
            restartPolicy: Always
            serviceAccountName: myserviceaccount
            containers:
            - name: my-container
              image: image
              ports:
              - name: service-port
                containerPort: 8082
              - name: ui
                containerPort: 8081
              readinessProbe:
              failureThreshold: 3
              httpGet:
               path: /api/health
                 port: 8081
                 scheme: HTTPS
        livenessProbe:
          exec:
            command:
              - cat
              - /version.txt
        [......]

1 Ответ

0 голосов
/ 02 марта 2020

Служба, предоставляемая через Ingress, должна отвечать на проверки работоспособности от балансировщика нагрузки.

Внешний балансировщик нагрузки HTTP (S), создаваемый GKE Ingress, поддерживает только порт 443 для https traffi c.

В этом случае вы можете:

  1. Использовать два отдельных ресурса Ingress для маршрутизации трафика c для двух разных имен хостов на одном IP-адресе и порт:

    • ui-https.my-host-name.com

    • wss-https.my-host-name.com

  2. Возможность использования Ambassador или Виртуальная служба Istio .

  3. Попробуйте Multi-Port Services .

Пожалуйста, дайте мне знать, если это помогло.

...