Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Den här guiden visar hur du använder cert-manager för att automatiskt utfärda och förnya SSL/TLS-certifikat till en eller flera klientdelar av distributionen av Azure Application Gateway for Containers. Vi använder gateway-API:et för att konfigurera nödvändiga resurser.
I det här exemplet har cert-manager konfigurerat certifikat som utfärdats från Let's Encrypt för att demonstrera en distribution från slutpunkt till slutpunkt, där Application Gateway för containrar tillhandahåller TLS-avlastning.
För att certifikat ska utfärdas av Let's Encrypt krävs en utmaning av utfärdaren att verifiera domänägarskapet. Den här valideringen sker genom att cert-manager kan skapa en podd- och HTTPRoute-resurs som exponerar en slutpunkt under certifikatutfärdande, vilket bevisar ditt ägarskap för domännamnet.
Mer information om cert-manager och Let's Encrypt med AKS i allmänhet finns här.
Förutsättningar
Om du följer BYO-distributionsstrategin, kontrollerar du att du konfigurerar Application Gateway för Container-resurser och ALB Controller
Om du följer den hanterade distributionsstrategin för ALB ska du säkerställa att du provisionerar ALB-kontroller och Application Gateway för Containers via anpassade resursen ApplicationLoadBalancer.
Distribuera HTTP-exempelprogrammet Använd följande deployment.yaml-fil i klustret för att skapa ett exempelwebbprogram för att demonstrera sidhuvudomskrivningen.
kubectl apply -f https://raw.githubusercontent.com/MicrosoftDocs/azure-docs/refs/heads/main/articles/application-gateway/for-containers/examples/traffic-split-scenario/deployment.yamlDet här kommandot skapar följande i klustret:
- ett namnområde med namnet
test-infra - två tjänster som heter
backend-v1ochbackend-v2itest-infranamnrymden - två distributioner kallas
backend-v1ochbackend-v2i namnområdettest-infra
- ett namnområde med namnet
Skapa en gatewayresurs
Skapa en ny Gateway resurs som lyssnar efter HTTP-begäranden från Let's Encrypt under utmaningsprocessen.
Skapa en gateway:
kubectl apply -f - <<EOF
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
name: gateway-01
namespace: test-infra
annotations:
alb.networking.azure.io/alb-namespace: alb-test-infra
alb.networking.azure.io/alb-name: alb-test
cert-manager.io/issuer: letsencrypt-cert
spec:
gatewayClassName: azure-alb-external
listeners:
- name: http-listener
protocol: HTTP
port: 80
allowedRoutes:
namespaces:
from: Same
EOF
Kommentar
När ALB-styrenheten skapar Application Gateway for Containers-resurser i Azure Resource Manager använder den följande namngivningskonvention för en klientdelsresurs: fe-<eight randomly generated characters>.
Om du vill ändra namnet på den klientdelsresurs som skapats i Azure kan du överväga att följa distributionsstrategin bring-your-own.
När gatewayresursen har skapats kontrollerar du att statusen är giltig, att lyssnaren är programmerad och att en adress har tilldelats till gatewayen.
kubectl get gateway gateway-01 -n test-infra -o yaml
Exempelutdata från en lyckad skapning av gateway.
status:
addresses:
- type: IPAddress
value: xxxx.yyyy.alb.azure.com
conditions:
- lastTransitionTime: "2023-06-19T21:04:55Z"
message: Valid Gateway
observedGeneration: 1
reason: Accepted
status: "True"
type: Accepted
- lastTransitionTime: "2023-06-19T21:04:55Z"
message: Application Gateway For Containers resource has been successfully updated.
observedGeneration: 1
reason: Programmed
status: "True"
type: Programmed
listeners:
- attachedRoutes: 0
conditions:
- lastTransitionTime: "2023-06-19T21:04:55Z"
message: ""
observedGeneration: 1
reason: ResolvedRefs
status: "True"
type: ResolvedRefs
- lastTransitionTime: "2023-06-19T21:04:55Z"
message: Listener is accepted
observedGeneration: 1
reason: Accepted
status: "True"
type: Accepted
- lastTransitionTime: "2023-06-19T21:04:55Z"
message: Application Gateway For Containers resource has been successfully updated.
observedGeneration: 1
reason: Programmed
status: "True"
type: Programmed
name: https-listener
supportedKinds:
- group: gateway.networking.k8s.io
kind: HTTPRoute
Installera Cert-Manager
Installera cert-manager med Helm:
helm install \
cert-manager oci://quay.io/jetstack/charts/cert-manager \
--version v1.19.1 \
--namespace cert-manager \
--create-namespace \
--set config.enableGatewayAPI=true \
--set crds.enabled=true
Helm-installationen skapar tre distributioner och vissa tjänster och poddar i ett nytt namnområde med namnet cert-manager. Den installerar även klusteromfattande stödresurser, till exempel RBAC-roller och anpassade resursdefinitioner.
Skapa en ClusterIssuer
Skapa en ClusterIssuer-resurs för att definiera hur cert-manager ska kommunicera med Let's Encrypt. I det här exemplet används en HTTP-utmaning. Under utmaningen skapar cert-manager en HTTPRoute resurs och motsvarande podd som presenterar en valideringsslutpunkt för att bevisa ägarskapet för domänen.
Tips
Andra utmaningar som stöds av Let's Encrypt dokumenteras på letsencrypt.org – Utmaningstyper
kubectl apply -f - <<EOF
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt-prod
namespace: test-infra
spec:
acme:
server: https://acme-v02.api.letsencrypt.org/directory # production endpoint
#server: https://acme-staging-v02.api.letsencrypt.org/directory # staging endpoint
email: your-email@example.com
privateKeySecretRef:
name: letsencrypt-private-key
solvers:
- http01:
gatewayHTTPRoute:
parentRefs:
- name: gateway-01
namespace: test-infra
kind: Gateway
EOF
Kontrollera att resursen har skapats
kubectl get ClusterIssuer -A -o yaml
Statusen ska visa True och skriva Ready.
status:
acme:
lastPrivateKeyHash: x+xxxxxxxxxxxxxxxxxxxxxxx+MY4PAEeotr9XH3V7I=
lastRegisteredEmail: your-email@example.com
uri: https://acme-staging-v02.api.letsencrypt.org/acme/acct/165888253
conditions:
- lastTransitionTime: "2024-10-04T21:22:40Z"
message: The ACME account was registered with the ACME server
observedGeneration: 1
reason: ACMEAccountRegistered
status: "True"
type: Ready
Skapa ett certifikat
kubectl apply -f - <<EOF
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: letsencrypt-cert
namespace: test-infra
spec:
secretName: letsencrypt-secret # name published to secret store
issuerRef:
name: letsencrypt-prod # ClusterIssuer resource name
kind: ClusterIssuer
dnsNames:
- contoso.com # domain name to be used
EOF
Kör följande kommando för att verifiera utfärdandet av certifikatet. Om certifikatet har utfärdats ska värdet för READY kolumnen vara True.
kubectl get certificate letsencrypt-cert -n test-infra
Om certifikatet inte har utfärdats kan du köra följande kommando för att verifiera statusen för en utmaning.
Kommentar
Om certifikatet har utfärdats, kommer utmaningen inte längre att listas.
kubectl get challenges -n test-infra -o yaml
Aktivera HTTPS på gatewayresursen
Ändra gatewayen för att lägga till en andra lyssnare för att avsluta HTTPS-begäranden med det utfärdade Let's Encrypt-certifikatet.
Skapa en gateway:
kubectl apply -f - <<EOF
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
name: gateway-01
namespace: test-infra
annotations:
alb.networking.azure.io/alb-namespace: alb-test-infra
alb.networking.azure.io/alb-name: alb-test
cert-manager.io/issuer: letsencrypt-cert
spec:
gatewayClassName: azure-alb-external
listeners:
- name: http-listener
protocol: HTTP
port: 80
allowedRoutes:
namespaces:
from: Same
- name: https-listener
port: 443
protocol: HTTPS
tls:
certificateRefs:
- name: letsencrypt-secret
allowedRoutes:
namespaces:
from: Same
EOF
Kommentar
När ALB-styrenheten skapar Application Gateway for Containers-resurser i Azure Resource Manager använder den följande namngivningskonvention för en klientdelsresurs: fe-<eight randomly generated characters>.
Om du vill ändra namnet på den klientdelsresurs som skapats i Azure kan du överväga att följa distributionsstrategin bring-your-own.
Skapa en HTTPRoute som lyssnar efter ditt värdnamn
Skapa en HTTPRoute för att hantera begäranden som tagits emot av lyssnaren https-listener .
Viktigt!
Se till att du ersätter contoso.com med det domännamn som du förväntar dig att certifikatet ska utfärdas till.
kubectl apply -f - <<EOF
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: https-example
namespace: test-infra
spec:
parentRefs:
- name: gateway-01
hostnames:
- "contoso.com"
rules:
- backendRefs:
- name: backend-v1
port: 8080
EOF
När HTTPRoute-resursen har skapats kontrollerar du att vägen är Godkänd och att Application Gateway for Containers-resursen är programmerad.
kubectl get httproute cert-manager-route -n test-infra -o yaml
Kontrollera att statusen för Application Gateway for Containers-resursen har uppdaterats.
status:
parents:
- conditions:
- lastTransitionTime: "2023-06-19T22:18:23Z"
message: ""
observedGeneration: 1
reason: ResolvedRefs
status: "True"
type: ResolvedRefs
- lastTransitionTime: "2023-06-19T22:18:23Z"
message: Route is Accepted
observedGeneration: 1
reason: Accepted
status: "True"
type: Accepted
- lastTransitionTime: "2023-06-19T22:18:23Z"
message: Application Gateway For Containers resource has been successfully updated.
observedGeneration: 1
reason: Programmed
status: "True"
type: Programmed
controllerName: alb.networking.azure.io/alb-controller
parentRef:
group: gateway.networking.k8s.io
kind: Gateway
name: gateway-01
namespace: test-infra
Testa åtkomsten till programmet
Nu är vi redo att skicka trafik till vårt exempelprogram via det värdnamn som används för ditt certifikat.
Viktigt!
Se till att du ersätter contoso.com med det domännamn som du förväntar dig att certifikatet ska utfärdas till.
curl https://contoso.com/ -v 2>&1 | grep issuer
Du bör se följande utdata:
* issuer: C=US; O=Let's Encrypt; CN=R10
Grattis, du har installerat ALB-styrenheten, distribuerat ett serverdelsprogram, utfärdat ett certifikat från Let's Encrypt med cert-manager och dirigerat trafik till programmet via Application Gateway för containrar.