Вход GKE, NGINX, HTTPS и сертификаты - PullRequest
1 голос
/ 31 октября 2019

Я настроил кластер Kubernetes на GCP / GKE, и все работает хорошо, за исключением одной вещи. Когда я получаю доступ к внешнему IP-адресу для службы, подается (по умолчанию?) «Поддельный сертификат контроллера входа Kubernetes».

Я пытаюсь использовать NGINX Ingress (https://kubernetes.github.io/ingress-nginx/) и следую тому, что яЯ верю, что это правильные инструкции для связи секрета TLS со входом. Например:

https://estl.tech/configuring-https-to-a-web-service-on-google-kubernetes-engine-2d71849520d

https://kubernetes.github.io/ingress-nginx/user-guide/tls/

Я создалсекрет, подобный следующему:

apiVersion: v1
kind: Secret
metadata:
  name: example-tls
  namespace: default
data:
  tls.crt: [removed]
  tls.key: [removed]
type: kubernetes.io/tls

И связанный с ним секрет (который я могу подтвердить, правильно применен, и я могу видеть в конфигурации кластера) с Ingress следующим образом:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: example-ingress
  namespace: default
  annotations:
    kubernetes.io/ingress.class: "nginx"
    kubernetes.io/ingress.allow-http: "false"
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
    nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
    nginx.ingress.kubernetes.io/affinity: "cookie"
spec:
  backend:
    serviceName: example-service
    servicePort: 80
  tls:
  - secretName: example-tls

Из документации я чувствую, что это должно работать (но, исключая ошибку, я, очевидно, ошибаюсь!).

Я также видел некоторую документацию о требовании целевых прокси для HTTPS. Возможно, именно так ядолжен делать это?

Большое спасибо за вашу помощь заранее.

Приветствия, Бен

PS: Это моя конфигурация балансировки нагрузки:

kind: Service
apiVersion: v1
metadata:
  name: ingress-nginx
  namespace: ingress-nginx
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
spec:
  externalTrafficPolicy: Cluster
  loadBalancerIP: [removed]
  sessionAffinity: ClientIP
  type: LoadBalancer
  selector:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
  ports:
    - name: http
      port: 80
      targetPort: http
    - name: https
      port: 443
      targetPort: https

Редактировать 1: Глядя на мой вход Iможно увидеть это:

➜  gke git:(develop) ✗ kubectl describe ing example-tls-ingress
Name:             example-tls-ingress
Namespace:        default
Address:          [removed]
Default backend:  example-webapp-service:80 ([removed])
TLS:
  example-tls terminates 
Rules:
  Host  Path  Backends
  ----  ----  --------
  *     *     example-webapp-service:80 ([removed])

Таким образом, похоже, что секрет раскрыт.

И это заставляет меня думать, что есть разница между TLS с прерыванием на входе и TLS с окончанием балансировки нагрузки

1 Ответ

1 голос
/ 31 октября 2019

Вы можете просто сослаться на это сообщение stackoverflow.

Вам необходимо установить jetstack cert-Manager, создать clusterissuer / эмитент вместе с сертификатом, в котором вам нужно передать имя домена/ hostname и jetstack автоматически создадут для вас секрет по имени, указанному вами в «Сертификате».

Этот секрет должен быть исправлен в TLS в правиле входа.

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