Как настроить соединение TLS для GKE Ingress - PullRequest
0 голосов
/ 24 марта 2019

Я хочу включить https-соединения для моего приложения в Google Cloud.Я следовал нескольким учебникам, но, похоже, ничего не работает.

Я развернул приложение в GKE, используя Ingress.Вот ingress.yml:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: myapp-ingress
  annotations:
    kubernetes.io/ingress.global-static-ip-name: myapp-ip
spec:
  backend:
    serviceName: myapp-service
    servicePort: 80

Доступ к нему по ip-адресу работает нормально, сайт доступен из Интернета.

Я приобрел домен с доменами Google и настроил зоны DNSдобавив запись A, указывающую на мой внешний IP-адрес и запись CNAME.Теперь приложение отлично доступно с этим доменом.

enter image description here

Затем я создал SSL-сертификат и секрет Kubernate, выполнив команды:

openssl genrsa -out myapp-ingress-1.key 2048
openssl req -new -key myapp-ingress-1.key -out myapp-ingress-1.csr -subj "/CN=myapp.co.uk"
openssl x509 -req -days 365 -in myapp-ingress-1.csr -signkey myapp-ingress-1.key -out myapp-ingress-1.crt
kubectl create secret tls myapp-tls-secret-1 --cert myapp-ingress-1.crt --key myapp-ingress-1.key

И обновил ingress.yml:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: myapp-ingress
  annotations:
    kubernetes.io/ingress.global-static-ip-name: myapp-ip
spec:
  tls:
  - secretName: myapp-tls-secret-1
  rules:
  - host: myapp.co.uk
    http:
      paths:
      - backend:
          serviceName: myapp-service
          servicePort: 80

Я пробовал несколько файлов ingress.yml, следуя различным примерам в интернете, но ни один из них не работал.

Может кто-нибудь посоветовать мне?

1 Ответ

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

В вашем файле yaml отсутствует строка, указывающая, какой хост вы защищаете.Поскольку вы не используете external-dns, вам придется вручную создавать записи на стороне вашего поставщика домена, чтобы подключить IP-адрес к вашему домену (кажется, вы уже сделали это).Похоже, ваш вход и ваш секретный ключ находятся в пространстве имен default, поэтому вы можете использовать следующее ingress.yaml:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: myapp-ingress
  annotations:
    kubernetes.io/tls-acme: "true"
    kubernetes.io/ingress.global-static-ip-name: myapp-ip
spec:
  tls:
  - hosts:
    - "myapp.co.uk"
    secretName: myapp-tls-secret-1
  rules:
  - host: "myapp.co.uk"
    http:
      paths:
      - path: /
        backend:
          serviceName: myapp-service
          servicePort: 80
...