Для каждого метода потребуется некоторая реконфигурация на стороне GKE / Istio.
Одно из решений - иметь CNAME
запись в облачном DNS и сертификат SSL с Alternative Names
.
С помощью вышеуказанного решения вы сможете отправлять запросы в свой GKE/Istio
кластер с обоими доменными именами при условии правильной конфигурации Istio.
Что такое CNAME
?
CNAME - это запись канонического имени или запись псевдонима.
Тип записи ресурса в системе доменных имен (DNS), указывающий, что одно доменное имя является псевдонимом другого канонического доменного имени.
Пример записи CNAME
:
DNS name Type TTL Data
old.domain. A 60 1.2.3.4
new.domain. CNAME 60 old.domain.
Альтернативные имена:
Альтернативное имя SAN или субъекта - это структурированный способ указать все доменные имена и IP-адреса, защищенные сертификатом.
Enstrustdatacard .com: что такое san и как он используется
Вы можете создать сертификат SSL для поддержки обоих:
Для этого есть множество вариантов, например Let's Encrypt или Cert Manager.
Пример
Я создал пример, чтобы показать вам, как это сделать:
- Настройте
DNS zone
в Cloud DNS
- Создайте базовое приложение с сервисом
- Создайте сертификат для примера приложения
- Создайте
Istio
ресурсы, чтобы разрешить подключения к примеру приложения
- Тестовое задание
Настроить DNS zone
в Cloud DNS
Вам потребуется 2 записи:
A
запись с IP-адресом вашего шлюза Ingress и именем: old.domain
CNAME
запись, указывающая на old.domain
с именем: new.domain
Ознакомьтесь с официальной документацией: Cloud.google.com: DNS: записи
Создайте базовое приложение с сервисом
Ниже приведен пример приложения со службой, которая ответит простым приветствием:
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello-dp
spec:
selector:
matchLabels:
app: hello-dp
replicas: 1
template:
metadata:
labels:
app: hello-dp
spec:
containers:
- name: hello
image: "gcr.io/google-samples/hello-app:2.0"
env:
- name: "PORT"
value: "50001"
---
apiVersion: v1
kind: Service
metadata:
name: hello-sv
spec:
selector:
app: hello-dp
ports:
- name: hello-port
protocol: TCP
port: 50001
targetPort: 50001
type: ClusterIP
Создайте сертификат для примера приложения
Как было сказано ранее, сертификат с Alternative Names
может быть создан с помощью Let's Encrypt. Я создал его с помощью:
- Виртуальная машина GCE с Ubuntu 16.04
- Открыть порт 80
- Доменное имя
old.domain
, указывающее на общедоступный IP-адрес виртуальной машины
- Руководство: Linode.com: Документы : Установите Let's encrypt, чтобы создать сертификат SSL
- Команда для создания сертификата:
# P18 #
- Сертификат, созданный в / etc / letsencrypt / archive /, используется при создании секрета tls для
GKE
с помощью команды: # P19 #
Помните, что этот сертификат был создан только для целей тестирования, и я настоятельно рекомендую использовать специальное решение, например: Сертификат-менеджер
PS: Если вы использовали этот метод, отмените изменения в облачном DNS, чтобы указать Istio
шлюз.
Создайте Istio
ресурсы, чтобы разрешить подключения к примеру приложения
Ниже приведены примеры Istio
ресурсов, позволяющих подключаться к примеру приложения с поддержкой HTTPS:
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: hello-gw
spec:
selector:
istio: ingressgateway
servers:
- port:
number: 443
name: https
protocol: HTTPS
tls:
mode: SIMPLE
credentialName: ssl-certificate
hosts:
- "old.domain"
- "new.domain"
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: hello-vs
spec:
hosts:
- "old.domain"
- "new.domain"
gateways:
- hello-gw
http:
- route:
- destination:
host: hello-sv
port:
number: 50001
Пожалуйста, обратите внимание на:
tls:
mode: SIMPLE
credentialName: ssl-certificate
Эта часть гарантирует, что подключение к кластеру будет использовать HTTPS.
Кроме того:
hosts:
- "old.domain"
- "new.domain"
Приведенное выше определение в обоих ресурсах разрешит соединения только с указанными доменами.
Тестовое задание
После применения всех вышеперечисленных ресурсов вы сможете ввести в своем браузере:
https://old.domain
https://new.domain
и получите сообщение ниже и действительный сертификат SSL:
Hello, world!
Version: 2.0.0
Hostname: hello-dp-5dd8b85b56-bk7zr
person
Dawid Kruk
schedule
09.06.2020
A
запись кDNS
серверам, чтобы указать ваш домен наingress-gateway
службу балансировки нагрузки Istio, однако вопрос в том, как вы хотите добавить свои ssl-сертификаты без изменения вашейingress-gateway
конфигурации. - person Dawid Kruk   schedule 29.05.2020A
записи. Целевой сертификат SSL должен поддерживать перенаправляемое доменное имя, иначе вы получите ошибку безопасности в браузере / приложении. - person John Hanley   schedule 30.05.2020ingress-gateway
. Это потребует дополнительных изменений в вашемingress-gateway
определении, поскольку хост будет другим (при условии, что это не*
). - person Dawid Kruk   schedule 02.06.2020