URL-адреса перенаправления с помощью Google Cloud - PullRequest
0 голосов
/ 28 мая 2020

У меня есть домен (example.com), уже настроенный в Cloud DNS. С помощью этого домена я могу получить доступ к микросервисам, которые находятся в кластере GKE. Я использую IP-адрес istio-ingressgateway в CloudDNS, чтобы установить связь между кластером

. Теперь у меня есть другой домен (newexample.com) с настраиваемым сертификатом для https-соединений. Есть ли способ перенаправить все запросы с newexample.com на example.com? Я не хочу ничего менять в конфигурации gke / istio, если это возможно.

1 Ответ

0 голосов
/ 09 июня 2020

Для каждого метода потребуется некоторая реконфигурация на любой стороне 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 для поддержки обоих:

  • old.domain
  • new.domain

Для этого есть множество вариантов, например 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 -dold.domain-dnew.domain

  • Сертификат, созданный в / etc / letsencrypt / archive /, используемый при создании секрета tls для GKE командой:

    $ kubectl create secret tlsssl-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
...