Condividi tramite


Esporre un servizio Azure Kubernetes tramite HTTP o HTTPS usando il gateway applicazione

Queste esercitazioni illustrano l'utilizzo delle risorse in ingresso di Kubernetes per esporre un servizio Kubernetes di esempio usando il gateway applicazione di Azure tramite HTTP o HTTPS.

Suggerimento

Vedere anche Che cos'è il Gateway applicativo per contenitori? al momento in anteprima pubblica.

Prerequisiti

  • Installare il grafico Helm ingress-azure.
    • Distribuzione Greenfield: se si inizia da zero, fare riferimento a queste istruzioni di installazione che illustrano i passaggi per distribuire un cluster del servizio Azure Kubernetes con il gateway applicazione e per installare il controller in ingresso del gateway applicazione nel cluster del servizio Azure Kubernetes.
    • Distribuzione Brownfield: se si dispone di un cluster del servizio Azure Kubernetes e del gateway applicazione esistenti, fare riferimento a queste istruzioni per installare il controller in ingresso del gateway applicazione nel cluster del servizio Azure Kubernetes.
  • Se si vuole usare HTTPS in questa applicazione, è necessario un certificato x509 e la relativa chiave privata.

Distribuire l'applicazione guestbook

L'applicazione guestbook è un'applicazione Kubernetes canonica che si compone di un front-end dell'interfaccia utente Web, un back-end e un database Redis. Per impostazione predefinita, guestbook espone l'applicazione tramite un servizio denominato frontend sulla porta 80. Senza una risorsa in ingresso Kubernetes, il servizio non è accessibile dall'esterno del cluster del servizio Azure Kubernetes. Utilizziamo l'applicazione e configuriamo le Risorse in ingresso per accedere all'applicazione tramite HTTP e HTTPS.

Usare le istruzioni seguenti per distribuire l'applicazione guestbook.

  1. Scaricare guestbook-all-in-one.yaml da qui
  2. Distribuire guestbook-all-in-one.yaml nel cluster del servizio Azure Kubernetes eseguendo
kubectl apply -f guestbook-all-in-one.yaml

A questo punto, l'applicazione guestbook è stata distribuita.

Esporre i servizi tramite HTTP

Per esporre l'applicazione guestbook, usare la risorsa in ingresso seguente:

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

Questo ingresso espone il servizio frontend della distribuzione guestbook-all-in-one come back-end predefinito del gateway applicazione.

Salvare la risorsa in ingresso precedente come ing-guestbook.yaml.

  1. Distribuire ing-guestbook.yaml eseguendo:

    kubectl apply -f ing-guestbook.yaml
    
  2. Controllare il log del controller in ingresso per verificare lo stato della distribuzione.

A questo punto l'applicazione guestbook dovrebbe essere disponibile. È possibile controllare la disponibilità visitando l'indirizzo pubblico del gateway applicazione.

Esporre i servizi tramite HTTPS

Senza nome host specificato

Senza specificare il nome host, il servizio guestbook è disponibile in tutti i nomi host che puntano al gateway applicazione.

  1. Prima di distribuire l'ingresso, è necessario creare un segreto Kubernetes per ospitare il certificato e la chiave privata. È possibile creare un segreto Kubernetes eseguendo

    kubectl create secret tls <guestbook-secret-name> --key <path-to-key> --cert <path-to-cert>
    
  2. Definire l'ingresso seguente. Nell'ingresso, specificare il nome del segreto nella sezione secretName.

    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
    

    Nota

    Sostituire <guestbook-secret-name> nella risorsa in ingresso precedente con il nome del segreto. Archiviare la risorsa in ingresso precedente in un nome file ing-guestbook-tls.yaml.

  3. Distribuire ing-guestbook-tls.yaml eseguendo

    kubectl apply -f ing-guestbook-tls.yaml
    
  4. Controllare il log del controller in ingresso per verificare lo stato della distribuzione.

A questo punto l'applicazione guestbook è disponibile sia su HTTP che su HTTPS.

Con il nome host specificato

È anche possibile specificare il nome host in ingresso per configurazioni e servizi TLS multiplex. Specificando hostname, il servizio guestbook è disponibile solo nell'host specificato.

  1. Definire l'ingresso seguente. Nell'ingresso, specificare il nome del segreto nella sezione secretName e sostituire di conseguenza il nome host nella sezione hosts.

    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. Distribuire ing-guestbook-tls-sni.yaml eseguendo

    kubectl apply -f ing-guestbook-tls-sni.yaml
    
  3. Controllare il log del controller in ingresso per verificare lo stato della distribuzione.

A questo punto l'applicazione guestbook è ora disponibile sia in HTTP che in HTTPS solo nell'host specificato (<guestbook.contoso.com> in questo esempio).

Integrazione con altri servizi

L'ingresso seguente consente di aggiungere altri percorsi in questo ingresso e reindirizzare tali percorsi ad altri servizi:

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