Поделиться через


Предоставление службы AKS по протоколу HTTP или HTTPS с помощью шлюза приложений

В этой статье показано использование ресурсов входящего трафика Kubernetes для предоставления примера службы Azure Kubernetes (AKS) через шлюз приложений Azure по протоколу HTTP или HTTPS.

Tip

Рассмотрите Шлюз приложений для контейнеров в качестве решения для управления входящим трафиком Kubernetes.

Prerequisites

  • Установленная ingress-azure диаграмма Helm:
    • Развертывание Greenfield: если вы начинаете с нуля, ознакомьтесь с этими инструкциями по установке, которые описывают шаги по развертыванию кластера AKS с помощью шлюза приложений и установке контроллера входящего трафика шлюза приложений (AGIC) в кластере AKS.
    • Развертывание Brownfield: если у вас есть существующий кластер AKS и развертывание шлюза приложений, ознакомьтесь с этими инструкциями по установке AGIC в кластере AKS.
  • Сертификат x509 и его закрытый ключ, если вы хотите использовать HTTPS в этом приложении.

Развертывание приложения гостевой книги

Приложение guestbook — это каноническое приложение Kubernetes, состоящее из интерфейса веб-интерфейса, серверной части и базы данных Redis.

По умолчанию guestbook предоставляет свое приложение через службу с именем frontend на порту 80. Без ресурса входящего трафика Kubernetes служба недоступна за пределами кластера AKS. Вы используете приложение и настраиваете ресурсы входящего трафика для доступа к приложению через HTTP и HTTPS.

Чтобы развернуть приложение guestbook, выполните следующие действия.

  1. Скачайте guestbook-all-in-one.yaml с этой страницы GitHub.

  2. Разверните guestbook-all-in-one.yaml в кластере AKS, выполнив следующую команду:

    kubectl apply -f guestbook-all-in-one.yaml
    

Публикация служб через HTTP

Чтобы предоставить приложение guestbook, используйте следующий ресурс ingress:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: guestbook
  annotations:
    kubernetes.io/ingress.class: azure/application-gateway
spec:
  rules:
  - http:
      paths:
      - backend:
          serviceName: frontend
          servicePort: 80

Этот входящий трафик предоставляет frontend сервис guestbook-all-in-one развертывания в качестве серверной части по умолчанию развертывания Шлюза приложений.

Сохраните предыдущий ресурс входящего трафика следующим образом ing-guestbook.yaml:

  1. Разверните ing-guestbook.yaml, выполнив следующую команду:

    kubectl apply -f ing-guestbook.yaml
    
  2. Проверьте журнал контроллера входящего трафика для состояния развертывания.

guestbook Теперь приложение должно быть доступно. Чтобы проверить доступность, посетите общедоступный адрес развертывания шлюза приложений.

Публикация служб через HTTPS

Без указанного имени узла

Если имя узла не указано, guestbook служба доступна во всех именах узлов, указывающих на развертывание шлюза приложений.

  1. Перед развертыванием ресурса входа создайте секрет Kubernetes для хранения сертификата и закрытого ключа.

    kubectl create secret tls <guestbook-secret-name> --key <path-to-key> --cert <path-to-cert>
    
  2. Определите следующий ресурс входящего трафика. В разделе secretName замените <guestbook-secret-name> на имя вашего секрета.

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: guestbook
      annotations:
        kubernetes.io/ingress.class: azure/application-gateway
    spec:
      tls:
        - secretName: <guestbook-secret-name>
      rules:
      - http:
          paths:
          - backend:
              serviceName: frontend
              servicePort: 80
    
  3. Сохраните ресурс входящего трафика в файле с именем ing-guestbook-tls.yaml.

  4. Разверните ing-guestbook-tls.yaml, выполнив следующую команду:

    kubectl apply -f ing-guestbook-tls.yaml
    
  5. Проверьте журнал контроллера входящего трафика для состояния развертывания.

Теперь приложение доступно как по протоколу HTTP, так и по HTTPS.

С указанным именем узла

Вы также можете указать имя хоста в ресурсе ingress для мультиплексирования конфигураций и служб TLS. При указании имени guestbook узла служба доступна только на указанном узле.

  1. Определите следующий ресурс входящего трафика. В разделе secretName замените <guestbook-secret-name> на имя вашего секрета. В разделах hosts и host замените <guestbook.contoso.com> на имя вашего узла.

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: guestbook
      annotations:
        kubernetes.io/ingress.class: azure/application-gateway
    spec:
      tls:
        - hosts:
          - <guestbook.contoso.com>
          secretName: <guestbook-secret-name>
      rules:
      - host: <guestbook.contoso.com>
        http:
          paths:
          - backend:
              serviceName: frontend
              servicePort: 80
    
  2. Разверните ing-guestbook-tls-sni.yaml, выполнив следующую команду:

    kubectl apply -f ing-guestbook-tls-sni.yaml
    
  3. Проверьте журнал контроллера входящего трафика для состояния развертывания.

guestbook Теперь приложение доступно как на HTTP, так и на HTTPS, только на указанном узле.

Интеграция с другими службами

Используйте следующий ресурс входящего трафика для добавления путей и перенаправления этих путей в другие службы:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: guestbook
  annotations:
    kubernetes.io/ingress.class: azure/application-gateway
spec:
  rules:
  - http:
      paths:
      - path: </other/*>
        backend:
          serviceName: <other-service>
          servicePort: 80
       - backend:
          serviceName: frontend
          servicePort: 80