Freigeben über


Verfügbarmachen eines AKS-Diensts über HTTP oder HTTPS mit Application Gateway

Dieser Artikel veranschaulicht die Verwendung von Kubernetes-Eingangsressourcen, um einen Azure Kubernetes-Beispieldienst (AKS) über Azure Application Gateway über HTTP oder HTTPS verfügbar zu machen.

Tipp

Ziehen Sie Application Gateway für Container für Ihre Kubernetes-Eingangslösung in Betracht.

Voraussetzungen

  • Ein installiertes ingress-azure-Helm-Diagramm:
    • Greenfield-Bereitstellung: Wenn Sie von Grund auf neu beginnen, lesen Sie diese Installationsanleitungen, in denen die Schritte zum Bereitstellen eines AKS-Clusters mit Application Gateway und zum Installieren des Application Gateway-Eingangsdatencontrollers (AGIC) im AKS-Cluster erläutert werden.
    • Brownfield-Bereitstellung: Wenn Sie über einen vorhandenen AKS-Cluster und eine Application Gateway-Bereitstellung verfügen, lesen Sie diese Anleitungen zum Installieren des Application Gateway-Eingangsdatencontrollers (AGIC) im AKS-Cluster.
  • Ein x509-Zertifikat und den zugehörigen privaten Schlüssel, wenn Sie HTTPS für diese Anwendung verwenden möchten.

Bereitstellen der Guestbook-Anwendung

Bei der guestbook-Anwendung handelt es sich um eine kanonische Kubernetes-Anwendung, die aus einem Web-UI-Front-End, einem Back-End und einer Redis-Datenbank besteht.

Standardmäßig macht guestbook die Anwendung über einen Dienst namens frontend an Port 80 verfügbar. Ohne Kubernetes-Eingangsressource kann von außerhalb des AKS-Clusters nicht auf den Dienst zugegriffen werden. Sie verwenden die Anwendung und richten Eingangsressourcen ein, um über HTTP und HTTPS auf die Anwendung zuzugreifen.

So stellen Sie die guestbook-Anwendung bereit:

  1. Laden Sie guestbook-all-in-one.yaml von dieser GitHub-Seite herunter.

  2. Stellen Sie guestbook-all-in-one.yaml in Ihrem AKS-Cluster bereit, indem Sie diesen Befehl ausführen:

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

Bereitstellen von Diensten über HTTP

Verwenden Sie die folgende Eingangsressource, um die guestbook-Anwendung verfügbar zu machen:

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

Die Eingangsressource macht den frontend-Dienst der guestbook-all-in-one-Bereitstellung als Standard-Back-End der Application Gateway-Bereitstellung verfügbar.

Speichern Sie die vorherige Eingangsressource unter dem Namen ing-guestbook.yaml:

  1. Stellen Sie ing-guestbook.yaml durch Ausführen dieses Befehls bereit:

    kubectl apply -f ing-guestbook.yaml
    
  2. Überprüfen Sie das Protokoll des Eingangsdatencontrollers bezüglich des Bereitstellungsstatus.

Nun sollte die guestbook-Anwendung verfügbar sein. Sie können die Verfügbarkeit überprüfen, indem Sie die öffentliche Adresse der Application Gateway-Bereitstellung besuchen.

Bereitstellen von Diensten über HTTPS

Ohne angegebenen Hostnamen

Wenn Sie keinen Hostnamen angeben, ist der guestbook-Dienst für alle Hostnamen verfügbar, die auf die Application Gateway-Bereitstellung verweisen.

  1. Bevor Sie die Eingangsressource bereitstellen, müssen Sie ein Kubernetes-Geheimnis erstellen, um das Zertifikat und den privaten Schlüssel zu hosten:

    kubectl create secret tls <guestbook-secret-name> --key <path-to-key> --cert <path-to-cert>
    
  2. Definieren Sie die folgende Eingangsressource. Ersetzen Sie <guestbook-secret-name> im Abschnitt secretName durch den Namen Ihres Geheimnisses.

    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. Speichern Sie die Eingangsressource unter dem Dateinamen ing-guestbook-tls.yaml.

  4. Stellen Sie ing-guestbook-tls.yaml durch Ausführen dieses Befehls bereit:

    kubectl apply -f ing-guestbook-tls.yaml
    
  5. Überprüfen Sie das Protokoll des Eingangsdatencontrollers bezüglich des Bereitstellungsstatus.

Nun ist die guestbook-Anwendung sowohl für HTTP als auch für HTTPS verfügbar.

Mit einem angegebenen Hostnamen

Sie können auch den Hostnamen für die Eingangsressource angeben, um Multiplex für TLS-Konfigurationen und Dienste zu verwenden. Wenn Sie einen Hostnamen angeben, ist der guestbook-Dienst nur auf dem angegebenen Host verfügbar.

  1. Definieren Sie die folgende Eingangsressource. Ersetzen Sie <guestbook-secret-name> im Abschnitt secretName durch den Namen Ihres Geheimnisses. Ersetzen Sie <guestbook.contoso.com> in den Abschnitten hosts und host durch den Hostnamen.

    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. Stellen Sie ing-guestbook-tls-sni.yaml durch Ausführen dieses Befehls bereit:

    kubectl apply -f ing-guestbook-tls-sni.yaml
    
  3. Überprüfen Sie das Protokoll des Eingangsdatencontrollers bezüglich des Bereitstellungsstatus.

Nun ist die guestbook-Anwendung nur auf dem angegebenen Host sowohl über HTTP als auch über HTTPS verfügbar.

Integration in andere Dienste

Verwenden Sie die folgende Eingangsressource, um Pfade hinzuzufügen, und leiten Sie diese Pfade zu anderen Diensten um:

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