Для каждого метода потребуется некоторая реконфигурация на любой стороне 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 или альтернативное имя субъекта name - это структурированный способ указать все доменные имена и IP-адреса, которые защищены сертификатом.
Enstrustdatacard.com: что такое san и как он используется
Вы можете создать сертификат SSL для поддержки обоих:
Для этого есть множество вариантов, например Let's Encrypt или Cert Manager.
Пример
Я создал пример, чтобы показать вам, как это сделать:
- Настроить
DNS zone
в облачном DNS - Создайте базовое c приложение с сервисом
- Создайте сертификат, например, приложение
- Создайте
Istio
ресурсы, чтобы разрешить соединения с примером приложения - Тест
Настройте DNS zone
в облачном DNS
Вам потребуются 2 записи:
A
запись с IP вашего шлюза Ingress и имя: old.domain
CNAME
запись, указывающая на old.domain
с именем: new.domain
Пожалуйста, посмотрите официальную документацию: Cloud.google.com: DNS: Записи
Создать базовое c приложение с сервисом
Ниже приведен пример приложения со сервисом, которое будет отвечать базовым c привет:
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 VM с Ubuntu 16.04
- Открытый порт 80
- Доменное имя
old.domain
указывающее на publi c IP-адрес виртуальной машины - Руководство: Linode.com: Документы: Установить давайте зашифруем, чтобы создать сертификат SSL
- Команда для создания сертификата:
$ ./letsencrypt-auto certonly --standalone -d
old.domain
-d
new.domain
- Сертификат, созданный в / etc / letsencrypt / archive /, используемый при создании секрета tls для
GKE
командой: $ kubectl create secret tls
ssl-certificate
--cert cert1.pem --key privkey1.pem
Имейте в виду, что этот сертификат был создано только для целей тестирования, и я настоятельно рекомендую использовать специальное решение, например: Cert-manager
PS: Если вы использовали этот метод, пожалуйста, отмените изменения в Cloud 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
Пожалуйста, обратите внимание c посмотрите на:
tls:
mode: SIMPLE
credentialName: ssl-certificate
Эта часть гарантирует, что подключение к кластеру будет использовать HTTPS
Дополнительно:
hosts:
- "old.domain"
- "new.domain"
Приведенное выше определение в обоих ресурсах разрешает соединения только с указанными доменами.
Тест
После применения всех вышеперечисленных ресурсов вы сможете ввести в своем браузере:
и получите сообщение ниже и действительный сертификат SSL:
Hello, world!
Version: 2.0.0
Hostname: hello-dp-5dd8b85b56-bk7zr