Kubernetes HTTPS Ingress в Google Container Engine

Я хочу предоставить службу HTTP, работающую в Google Container Engine через HTTPS, только балансировщик нагрузки.

Как определить во входном объекте, что я хочу HTTPS только балансировщик нагрузки вместо HTTP по умолчанию?

Или есть способ навсегда уронить HTTP протокол от созданного балансировщика нагрузки? Когда я добавлю HTTPS протокол, а затем сбросить HTTP протокол, HTTP через несколько минут воссоздана платформой.

Ingress:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: myapp-ingress
spec:
  backend:
    serviceName: myapp-service
    servicePort: 8080

2 ответа

Решение

Чтобы иметь доступ только к службе HTTP, вы можете заблокировать трафик на порту 80, как упомянуто по этой ссылке:

Вы можете заблокировать трафик на:80 через аннотацию. Возможно, вы захотите сделать это, если все ваши клиенты будут использовать балансировщик нагрузки только через https, и вы не хотите тратить лишнее правило пересылки GCE, например:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: test
  annotations:
    kubernetes.io/ingress.allow-http: "false"
spec:
  tls:
  # This assumes tls-secret exists.
  # To generate it run the make in this directory.
  - secretName: tls-secret
  backend:
    serviceName: echoheaders-https
    servicePort: 80

Вы также можете использовать

Перенаправления с HTTP на HTTPS настраиваются с помощью поля redirectToHttps в пользовательском ресурсе FrontendConfig. Перенаправления включены для всего ресурса Ingress, поэтому для всех служб, на которые ссылается Ingress, будет включено перенаправление HTTPS.

Следующий манифест FrontendConfig включает перенаправления с HTTP на HTTPS. Установите для поля spec.redirectToHttps.enabled значение true, чтобы включить перенаправления HTTPS. Поле spec.responseCodeName является необязательным. Если он опущен, используется перенаправление 301 Moved Permanently.

Например

      apiVersion: networking.gke.io/v1beta1
kind: FrontendConfig
metadata:
  name: your-frontend-config-name
spec:
  redirectToHttps:
    enabled: true
    responseCodeName: MOVED_PERMANENTLY_DEFAULT

MOVED_PERMANENTLY_DEFAULTесть в наличииRESPONSE_CODEзначение поля, чтобы вернуть301код ответа перенаправления (по умолчанию, еслиresponseCodeNameне указано).

Вы можете найти больше вариантов здесь: перенаправления с HTTP на HTTPS

Затем вы должны связать свойFrontendConfigкIngress, так:

      apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: your-ingress-name
  annotations:
    networking.gke.io/v1beta1.FrontendConfig: your-frontend-config-name
spec:
  tls:
    ...
Другие вопросы по тегам