Condividi tramite


Offload SSL con il gateway applicativo per contenitori - API in ingresso (anteprima)

Questo documento illustra come configurare un'applicazione di esempio che usa la risorsa In ingresso da API in ingresso:

Background

Il Gateway applicativo per contenitori consente l'offload SSL per migliorare le prestazioni del back-end. Vedere lo scenario di esempio seguente:

A figure showing SSL offloading with Application Gateway for Containers.

Prerequisiti

Importante

Il Gateway applicativo per contenitori è al momento disponibile in ANTEPRIMA.
Vedere le condizioni per l'utilizzo supplementari per le anteprime di Microsoft Azure per termini legali aggiuntivi che si applicano a funzionalità di Azure in versione beta, in anteprima o in altro modo non ancora disponibili a livello generale.

  1. Se si segue la strategia di distribuzione personalizzata (Bring Your Own Deployment), assicurarsi di configurare le risorse Gateway applicativo per contenitori e il controller ALB

  2. Se si segue la strategia di distribuzione gestita di ALB, assicurarsi di aver effettuato il provisioning del controller ALB e delle risorse Gateway applicativo per contenitori tramite la risorsa personalizzata ApplicationLoadBalancer.

  3. Distribuire un'applicazione HTTP di esempio: applicare il file deployment.yaml seguente nel cluster per creare un'applicazione Web di esempio per illustrare l'offload TLS/SSL.

    kubectl apply -f https://trafficcontrollerdocs.blob.core.windows.net/examples/https-scenario/ssl-termination/deployment.yaml
    

    Questo comando crea gli elementi seguenti nel cluster:

    • uno spazio dei nomi denominato test-infra
    • un servizio denominato echo nello spazio dei nomi test-infra
    • una distribuzione denominata echo nello spazio dei nomi test-infra
    • un segreto denominato listener-tls-secret nello spazio dei nomi test-infra

Distribuire le risorse dell'API in ingresso necessarie

  1. Creare un ingresso
kubectl apply -f - <<EOF
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-01
  namespace: test-infra
  annotations:
    alb.networking.azure.io/alb-name: alb-test
    alb.networking.azure.io/alb-namespace: alb-test-infra
spec:
  ingressClassName: azure-alb-external
  tls:
  - hosts:
    - example.com
    secretName: listener-tls-secret
  rules:
  - host: example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: echo
            port:
              number: 80
EOF

Nota

Quando il controller ALB crea le risorse Gateway applicativo per contenitori in ARM, usa la convenzione di denominazione seguente per una risorsa front-end: fe-<8 caratteri generati in modo casuale>

Se si vuole modificare il nome del front-end creato in Azure, valutare la possibilità di seguire la strategia di distribuzione personalizzata.

Dopo aver creato la risorsa in ingresso, verificare che lo stato mostri il nome host del servizio di bilanciamento del carico e che entrambe le porte siano in ascolto per le richieste.

kubectl get ingress ingress-01 -n test-infra -o yaml

Output di esempio della corretta creazione della risorsa in ingresso.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    alb.networking.azure.io/alb-frontend: FRONTEND_NAME
    alb.networking.azure.io/alb-id: /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/yyyyyyyy/providers/Microsoft.ServiceNetworking/trafficControllers/zzzzzz
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"networking.k8s.io/v1","kind":"Ingress","metadata":{"annotations":{"alb.networking.azure.io/alb-frontend":"FRONTEND_NAME","alb.networking.azure.io/alb-id":"/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/yyyyyyyy/providers/Microsoft.ServiceNetworking/trafficControllers/zzzzzz"},"name"
:"ingress-01","namespace":"test-infra"},"spec":{"ingressClassName":"azure-alb-external","rules":[{"host":"example.com","http":{"paths":[{"backend":{"service":{"name":"echo","port":{"number":80}}},"path":"/","pathType":"Prefix"}]}}],"tls":[{"hosts":["example.com"],"secretName":"listener-tls-secret"}]}}
  creationTimestamp: "2023-07-22T18:02:13Z"
  generation: 2
  name: ingress-01
  namespace: test-infra
  resourceVersion: "278238"
  uid: 17c34774-1d92-413e-85ec-c5a8da45989d
spec:
  ingressClassName: azure-alb-external
  rules:
  - host: example.com
    http:
      paths:
      - backend:
          service:
            name: echo
            port:
              number: 80
        path: /
        pathType: Prefix
  tls:
  - hosts:
    - example.com
    secretName: listener-tls-secret
status:
  loadBalancer:
    ingress:
    - hostname: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.fzyy.alb.azure.com
      ports:
      - port: 80
        protocol: TCP
      - port: 443
        protocol: TCP

Testare l'accesso all'applicazione

A questo punto, è possibile inviare traffico all'applicazione di esempio tramite il nome di dominio completo assegnato al front-end. Usare il comando seguente per ottenere il nome di dominio completo.

fqdn=$(kubectl get ingress ingress-01 -n test-infra -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')

Il curling di questo nome di dominio completo deve restituire risposte dal back-end come configurato in HTTPRoute.

fqdnIp=$(dig +short $fqdn)
curl -vik --resolve example.com:443:$fqdnIp https://example.com

Congratulazioni. Il controller ALB è stato installato, è stata distribuita un'applicazione back-end e il traffico è stato instradato all'applicazione tramite ingresso nel Gateway applicativo per contenitori.