Назад | Перейти на главную страницу

Как принять HTTPS и веб-сокеты в новом развертывании Google Kubernetes Engine?

Я установил простое развертывание GKE с одним узлом с входящим потоком по умолчанию (бета), созданным через консоль GCP. Я хотел бы настроить управляемый Google SSL-сертификат и прокси-сервер HTTPS для одного узла GKE и службы, в которой размещены HTTP и WebSockets.

Упоминаются более старые методы использования NGINX и Ingress Controller в качестве балансировщика нагрузки и / или обратного прокси для разрешения WebSockets и HTTPS, но эти параметры не интегрируются с балансировщиками нагрузки GCP, что означает отсутствие Cloud CDN, Cloud NAT или Google- управляемые сертификаты SSL. Из документации кажется, что они разобрались со старыми проблемами веб-сокетов и балансировщиков нагрузки https, но у GKE нет информации, которую я могу найти, как это сделать.

Есть ли способ настроить это вручную?

Соответствующая конфигурация сервиса:

spec:
  clusterIP: 10.27.247.83
  externalTrafficPolicy: Cluster
  ports:
  - nodePort: 30621
    port: 80
    protocol: TCP
    targetPort: 3456
  selector:
    app: angmar-wsproxy-test
  sessionAffinity: None
  type: LoadBalancer
status:
  loadBalancer:
    ingress:
    - ip: 35.245.111.75

Балансировщик нагрузки отображается в консоли GCP как TCP-прокси, что не оставляет никаких вариантов для привязки сеанса, функций HTTP, таких как веб-сокеты, или SSL-сертификатов, управляемых Google.

не уверен, что это все еще актуально, но да - это можно сделать.

# this will only provision if you the A record test.example.com will point to the address of the https load balancer

# create a managed cert
apiVersion: networking.gke.io/v1beta1
kind: ManagedCertificate
metadata:
  name: example-certificate
spec:
  domains:
    - test.example.com

---
# create an http(s) LB
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  namespace: riscale-test
  name: riscale-ingress
  labels:
    name: riscale-ingress
  annotations:

    kubernetes.io/ingress.global-static-ip-name: <static-ip-name> 
    # only relevant if you reserved an address:
    # gcloud compute addresses create <address-name> --description "<some description>" --global
    networking.gke.io/managed-certificates: example-certificate # need to match the ManagedCertificate name
    kubernetes.io/ingress.allow-http: "false" # disable http - only listen on HTTPS
spec:
  rules:
  - http:
      paths:
      - path: /m/*
        backend:
          serviceName: mgmt
          servicePort: 8080
      - path: /* # default backend
        backend:
          serviceName: ui
          servicePort: 4200

---
# not mandatory - only relevant when you wish to configure the backend 
# this example increases the timeout from 30 sec default to 12 hours (for WS)
apiVersion: cloud.google.com/v1beta1
kind: BackendConfig
metadata:
  name: mgmt-service-backend
spec:
  timeoutSec: 43200

---
# another example of backend config to allow for BackendConfig
apiVersion: cloud.google.com/v1beta1
kind: BackendConfig
metadata:
  name: ui-backend
spec:
  cdn:
    enabled: true
    cachePolicy:
      includeHost: false
      includeProtocol: true
      includeQueryString: false
---
apiVersion: v1
kind: Service
metadata:
  name: mgmt
  annotations:
    beta.cloud.google.com/backend-config: '{"ports": {"8080":"mgmt-service-backend"}}'
spec:
  selector:
    app: mgmt
  type: NodePort
  ports:
    - name: mgmt-service-port
      port: 8080
      targetPort: 8080
      protocol: TCP