Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu kılavuz, kapsayıcılar için Azure Uygulama Ağ Geçidi dağıtımınızın bir veya birden fazla önendine SSL/TLS sertifikalarını otomatik olarak vermek ve yenilemek için cert-manager'ın nasıl kullanılacağını göstermektedir. Gerekli kaynakları yapılandırmak için Ağ Geçidi API'sini kullanırız.
Bu örnek kapsamında, Let's Encrypt'den verilen sertifikaları yapılandırmak için cert-manager'ı kullandık ve Kapsayıcılar için Application Gateway'in TLS yükünü azaltmak suretiyle uçtan uca bir dağıtımı gösterdik.
Sertifikaların Let's Encrypt tarafından verilmesi için, yetkili tarafından alan adı sahipliğini doğrulamak için bir doğrulama süreci gerekir. Bu doğrulama, cert-manager'ın sertifika verme sırasında bir uç noktayı erişime açan bir pod ve HTTPRoute kaynağı oluşturmasına izin vererek ve etki alanı adının sahipliğini kanıtlayarak gerçekleşir.
cert-manager ve Genel olarak AKS ile Şifreleyelim ile ilgili diğer ayrıntılara buradan ulaşabilirsiniz.
Prerequisites
BYO dağıtım stratejisini izliyorsanız Kapsayıcılar için Application Gateway kaynaklarınızı ve ALB Denetleyicisi'ni (Eklenti veya Helm) ayarladığınızdan emin olun
ALB yönetilen dağıtım stratejisini izliyorsanız, ApplicationLoadBalancer özel kaynağı aracılığıyla ALB Denetleyicinizi (Eklenti veya Helm) ve Kapsayıcılar için Application Gateway kaynaklarını sağladığınızdan emin olun.
Örnek bir HTTP uygulaması dağıtın Başlık yeniden yazımını göstermek için aşağıdaki deployment.yaml dosyasını kümenize uygulayarak bir örnek web uygulaması oluşturun.
kubectl apply -f https://raw.githubusercontent.com/MicrosoftDocs/azure-docs/refs/heads/main/articles/application-gateway/for-containers/examples/traffic-split-scenario/deployment.yamlBu komut kümenizde aşağıdakileri oluşturur:
- adlı bir ad alanı
test-infra -
backend-v1ad alanındakibackend-v2vetest-infraadlı iki hizmet -
backend-v1vebackend-v2adlı iki dağıtım,test-infraad alanında
- adlı bir ad alanı
Ağ geçidi kaynağı oluşturma
Sınama işlemi sırasında Let's Encrypt'ten gelen HTTP isteklerini dinleyen yeni Gateway bir kaynak oluşturun.
Ağ geçidi oluşturma:
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-prod
spec:
gatewayClassName: azure-alb-external
listeners:
- name: http-listener
protocol: HTTP
port: 80
allowedRoutes:
namespaces:
from: Same
EOF
Note
ALB Denetleyicisi Azure Resource Manager'da Kapsayıcılar için Application Gateway kaynaklarını oluşturduğunda, bir ön uç kaynağı için aşağıdaki adlandırma kuralını kullanır: fe-<eight randomly generated characters>.
Azure'da oluşturulan ön uç kaynağının adını değiştirmek istiyorsanız , kendi dağıtım stratejinizi getirin seçeneğini izleyin.
Ağ geçidi kaynağı oluşturulduktan sonra durumun geçerli olduğundan, dinleyicinin Programlandığından ve ağ geçidine bir adres atandığından emin olun.
kubectl get gateway gateway-01 -n test-infra -o yaml
Başarılı ağ geçidi oluşturma işleminin örnek çıktısı.
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
Cert-Manager'ı yükleme
Helm kullanarak cert-manager'ı yükleyin:
helm install \
cert-manager oci://quay.io/jetstack/charts/cert-manager \
--version v1.19.3 \
--namespace cert-manager \
--create-namespace \
--set config.enableGatewayAPI=true \
--set crds.enabled=true
Helm yüklemesi, cert-manager adlı yeni bir ad alanında üç dağıtım ve bazı hizmetler ile podlar oluşturur. Ayrıca RBAC rolleri ve Özel Kaynak Tanımları gibi küme kapsamlı destek kaynaklarını da yükler.
ClusterIssuer'ı oluşturun
cert-manager'ın Let's Encrypt ile nasıl iletişim kuracağını tanımlamak için bir ClusterIssuer kaynağı oluşturun. Bu örnekte http sınaması kullanılır. Sınama sırasında, cert-manager etki alanının sahipliğini kanıtlamak için doğrulama uç noktası sunan bir HTTPRoute kaynak ve karşılık gelen pod oluşturur.
Tip
Let's Encrypt tarafından desteklenen diğer zorluklar letsencrypt.org - Sınama Türleri'ne göre belgelenmiştir
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
Kaynağın oluşturulduğunu doğrulama
kubectl get ClusterIssuer -A -o yaml
Durum True ve tür Ready olarak görüntülenmelidir.
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
Sertifika oluşturma
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
Sertifikanın verilmesini doğrulamak için aşağıdaki komutu yürütür. Sertifika verildiyse, sütunun READY değeri olmalıdır True.
kubectl get certificate letsencrypt-cert -n test-infra
Sertifika verilmediyse, bir sınamanın durumunu doğrulamak için aşağıdaki komutu yürütebilirsiniz.
Note
Sertifika başarıyla verildiyse sınama artık listelenmez.
kubectl get challenges -n test-infra -o yaml
Ağ Geçidi kaynağında HTTPS'yi etkinleştirme
Verilen Let's Encrypt sertifikasıyla HTTPS isteklerini sonlandırmak için ağ geçidini değiştirerek ikinci bir dinleyici ekleyin.
Ağ geçidi oluşturma:
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
Note
ALB Denetleyicisi Azure Resource Manager'da Kapsayıcılar için Application Gateway kaynaklarını oluşturduğunda, bir ön uç kaynağı için aşağıdaki adlandırma kuralını kullanır: fe-<eight randomly generated characters>.
Azure'da oluşturulan ön uç kaynağının adını değiştirmek istiyorsanız , kendi dağıtım stratejinizi getirin seçeneğini izleyin.
Ana bilgisayar adınızı dinleyen bir HTTPRoute oluşturma
Dinleyici tarafından https-listener alınan istekleri işlemek için bir HTTPRoute oluşturun.
Important
değerini sertifikanın verilmesini beklediğiniz etki alanı adıyla değiştirdiğinizden contoso.com emin olun.
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
HTTPRoute kaynağı oluşturulduktan sonra, yolun Kabul Edildi ve Kapsayıcılar için Application Gateway kaynağının Programlandığıdan emin olun.
kubectl get httproute cert-manager-route -n test-infra -o yaml
Kapsayıcılar için Application Gateway kaynağının durumunun başarıyla güncelleştirildiğinden emin olun.
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
Uygulamaya erişimi test etme
Artık sertifikanız için kullanılan ana bilgisayar adı aracılığıyla örnek uygulamamıza trafik göndermeye hazırız.
Important
"contoso.com değerini sertifikanın verilmesini beklediğiniz alan adıyla değiştirdiğinizden emin olun."
curl https://contoso.com/ -v 2>&1 | grep issuer
Aşağıdaki çıkışı görmeniz gerekir:
* issuer: C=US; O=Let's Encrypt; CN=R10
Tebrikler, ALB Denetleyicisi'ni yüklediniz, bir arka uç uygulaması dağıttınız, Let's Encrypt with cert-manager'dan bir sertifika yayımladınız ve trafiği Kapsayıcılar için Application Gateway aracılığıyla uygulamaya yönlendirdiniz.