Hébergement multisite avec Passerelle d’application pour conteneurs – API Entrée
Ce document vous aide à configurer un exemple d’application qui utilise l’API Ingress pour illustrer l’hébergement de plusieurs sites sur la même ressource Kubernetes Ingress / Application Gateway pour conteneurs frontend. Les étapes sont fournies pour :
- Créer une ressource Ingress avec deux hôtes.
Background
Application Gateway pour conteneurs active l’hébergement multisite en vous permettant de configurer plusieurs applications web sur le même port. Deux sites uniques ou plus peuvent être hébergés à l’aide de services principaux uniques. Consultez l’exemple de scénario suivant :
Prérequis
Si vous avez utilisé la stratégie de déploiement BYO, veillez à configurer vos ressources de Passerelle d’application pour conteneurs et votre contrôleur ALB.
Si vous avez utilisé la stratégie de déploiement managé ALB, provisionnez votre contrôleur ALB et les ressources de Passerelle d’application pour conteneurs avec la ressource personnalisée ApplicationLoadBalancer.
Déployez un exemple d’application HTTP :
Appliquez le fichier deployment.yaml suivant sur votre cluster pour créer un exemple d’application web afin de montrer le routage basé sur un chemin d’accès, une requête et un en-tête.kubectl apply -f https://raw.githubusercontent.com/MicrosoftDocs/azure-docs/refs/heads/main/articles/application-gateway/for-containers/examples/traffic-split-scenario/deployment.yaml
Cette commande crée les éléments suivants sur votre cluster :
- Un espace de noms nommé
test-infra
- Deux services nommés
backend-v1
etbackend-v2
dans l’espace de nomstest-infra
- Deux déploiements nommés
backend-v1
etbackend-v2
dans l’espace de nomstest-infra
- Un espace de noms nommé
Déployer les ressources Ingress requises
- 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
rules:
- host: contoso.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: backend-v1
port:
number: 8080
- host: fabrikam.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: backend-v2
port:
number: 8080
EOF
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: contoso.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: backend-v1
port:
number: 8080
- host: fabrikam.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: backend-v2
port:
number: 8080
status:
loadBalancer:
ingress:
- hostname: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.fzyy.alb.azure.com
ports:
- port: 80
protocol: TCP
Tester l’accès à l’application
Nous sommes maintenant prêts à envoyer du trafic à notre exemple d’application, via le nom de domaine complet affecté au front-end. Utilisez la commande suivante pour obtenir le nom de domaine complet.
fqdn=$(kubectl get ingress ingress-01 -n test-infra -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')
Puis, spécifiez l’indicateur de nom de serveur à l’aide de la commande curl, contoso.com
pour le nom de domaine complet frontal devrait renvoyer une réponse du service backend-v1.
fqdnIp=$(dig +short $fqdn)
curl -k --resolve contoso.com:80:$fqdnIp http://contoso.com
Par le biais de la réponse, nous devrions voir :
{
"path": "/",
"host": "contoso.com",
"method": "GET",
"proto": "HTTP/1.1",
"headers": {
"Accept": [
"*/*"
],
"User-Agent": [
"curl/7.81.0"
],
"X-Forwarded-For": [
"xxx.xxx.xxx.xxx"
],
"X-Forwarded-Proto": [
"http"
],
"X-Request-Id": [
"dcd4bcad-ea43-4fb6-948e-a906380dcd6d"
]
},
"namespace": "test-infra",
"ingress": "",
"service": "",
"pod": "backend-v1-5b8fd96959-f59mm"
}
Puis, spécifiez indicateur de nom de serveur à l’aide de la commande curl, fabrikam.com
pour le nom de domaine complet frontal devrait renvoyer une réponse du service backend-v1.
fqdnIp=$(dig +short $fqdn)
curl -k --resolve fabrikam.com:80:$fqdnIp http://fabrikam.com
Par le biais de la réponse, nous devrions voir :
{
"path": "/",
"host": "fabrikam.com",
"method": "GET",
"proto": "HTTP/1.1",
"headers": {
"Accept": [
"*/*"
],
"User-Agent": [
"curl/7.81.0"
],
"X-Forwarded-For": [
"xxx.xxx.xxx.xxx"
],
"X-Forwarded-Proto": [
"http"
],
"X-Request-Id": [
"adae8cc1-8030-4d95-9e05-237dd4e3941b"
]
},
"namespace": "test-infra",
"ingress": "",
"service": "",
"pod": "backend-v2-594bd59865-ppv9w"
}
Félicitations, vous avez installé le contrôleur ALB, déployé une application back-end et routé le trafic vers deux services principaux différents en utilisant des noms d’hôte différents avec l’API Ingress sur Application Gateway pour conteneurs.