Partager via


Déchargement SSL avec Application Gateway pour les conteneurs – Entrée API

Ce document permet de configurer un exemple d’application qui utilise la ressource d’entrée à partir de l’API d’entrée:

Background

Application Gateway pour conteneurs active le déchargement de SSL pour améliorer les performances du back-end. Consultez l’exemple de scénario suivant :

A figure showing SSL offloading with Application Gateway for Containers.

Prérequis

  1. Si vous suivez la stratégie de déploiement BYO, veillez à configurer vos ressources Application Gateway pour conteneurs et à Contrôleur ALB

  2. Si vous suivez la stratégie de déploiement managé ALB, veillez à provisionner vos Contrôleur ALB et les ressources Application Gateway pour conteneurs via les ressources ApplicationLoadBalancer personnalisée.

  3. Déployer un exemple d’application HTTPS : appliquez le fichier deployment.yaml suivant sur votre cluster pour créer un exemple d’application web pour illustrer le déchargement TLS/SSL.

    kubectl apply -f https://raw.githubusercontent.com/MicrosoftDocs/azure-docs/refs/heads/main/articles/application-gateway/for-containers/examples/https-scenario/ssl-termination/deployment.yaml
    

    Cette commande crée les éléments suivants sur votre cluster :

    • un espace de noms appelé test-infra
    • un service appelé echo dans l’espace de noms test-infra
    • un déploiement appelé echo dans l’espace de noms test-infra
    • un secret appelé listener-tls-secret dans l’espace de noms test-infra

Déployer les ressources d’API d’entrée requises

  1. Créer une entrée
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

Remarque

Lorsque le contrôleur ALB crée les ressources Passerelle d’application pour conteneurs dans ARM, il utilise la convention de dénomination suivante pour une ressource front-end : fe-<8 caractères générés aléatoirement>

Si vous souhaitez modifier le nom du front-end créé dans Azure, il peut être préférable de suivre la stratégie de déploiement BYO.

Lorsque la ressource d’entrée est créée, vérifiez que l’état affiche le nom d’hôte de votre équilibreur de charge et que les deux ports écoutent les requêtes.

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

Exemple de sortie de création d’entrée réussie.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    alb.networking.azure.io/alb-frontend: FRONTEND_NAME
    alb.networking.azure.io/alb-id: /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/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/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/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

Tester l’accès à l’application

Nous sommes maintenant prêts à envoyer du trafic vers notre exemple d'application, via le FQDN attribué au frontend. Utilisez la commande ci-dessous pour obtenir le nom de domaine complet.

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

Le curling de ce nom de domaine complet doit retourner des réponses du back-end tel qu’il est configuré sur HTTPRoute.

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

Félicitations, vous avez installé le contrôleur ALB, déployé une application principale et routé le trafic vers l’application via Ingress on Application Gateway pour conteneurs.