Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Panduan ini menunjukkan cara menggunakan cert-manager untuk secara otomatis menerbitkan dan memperbarui sertifikat SSL/TLS ke satu atau beberapa frontend penyebaran Azure Application Gateway for Containers Anda. Kami menggunakan API Gateway untuk mengonfigurasi sumber daya yang diperlukan.
Untuk tujuan contoh ini, kami mengonfigurasi cert-manager untuk sertifikat yang diperoleh dari Let's Encrypt guna mendemonstrasikan penyebaran end-to-end, di mana Application Gateway untuk Kontainer menyediakan offloading TLS.
Agar sertifikat dikeluarkan oleh Let's Encrypt, otoritas memerlukan tantangan untuk memverifikasi kepemilikan domain. Validasi ini terjadi dengan memungkinkan cert-manager membuat pod dan sumber daya HTTPRoute yang mengekspos titik akhir selama penerbitan sertifikat, membuktikan kepemilikan Anda atas nama domain.
Detail selengkapnya tentang cert-manager dan Let's Encrypt dengan AKS secara umum dapat ditemukan di sini.
Prasyarat
Jika mengikuti strategi penyebaran BYO, pastikan Anda menyiapkan Application Gateway untuk sumber daya Kontainer dan Pengontrol ALB
Jika mengikuti strategi penyebaran terkelola ALB, pastikan Anda menyediakan Pengontrol ALB dan Application Gateway untuk sumber daya Kontainer melalui sumber daya kustom ApplicationLoadBalancer.
Sebarkan contoh aplikasi HTTP Terapkan file deployment.yaml berikut pada kluster Anda untuk membuat aplikasi web sampel untuk menunjukkan penulisan ulang header.
kubectl apply -f https://raw.githubusercontent.com/MicrosoftDocs/azure-docs/refs/heads/main/articles/application-gateway/for-containers/examples/traffic-split-scenario/deployment.yamlPerintah ini membuat yang berikut ini pada kluster Anda:
- namespace yang dipanggil
test-infra - dua layanan bernama
backend-v1danbackend-v2di namespacetest-infra - dua deployment yang dipanggil
backend-v1danbackend-v2di ruang namatest-infra
- namespace yang dipanggil
Membuat sumber daya Gateway
Buat sumber daya baru Gateway yang mendengarkan permintaan HTTP dari Let's Encrypt selama proses tantangan.
Membuat 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
Catatan
Saat Pengontrol ALB membuat Application Gateway untuk sumber daya kontainer di Azure Resource Manager, pengontrol menggunakan konvensi penamaan berikut untuk sumber daya frontend: fe-<eight randomly generated characters>.
Jika Anda ingin mengubah nama sumber daya frontend yang dibuat di Azure, pertimbangkan untuk mengikuti strategi penyebaran bawaan Anda sendiri.
Setelah sumber daya gateway dibuat, pastikan statusnya valid, pendengar diprogram, dan alamat ditetapkan ke gateway.
kubectl get gateway gateway-01 -n test-infra -o yaml
Contoh output pembuatan gateway yang berhasil.
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
Menginstal Cert-Manager
Instal cert-manager menggunakan 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
Penginstalan helm membuat tiga penerapan serta beberapa layanan dan pod di namespace baru bernama cert-manager. Ini juga menginstal sumber daya pendukung cakupan kluster, seperti peran RBAC dan Definisi Sumber Daya Kustom.
Membuat sebuah ClusterIssuer
Buat sumber daya ClusterIssuer untuk menentukan bagaimana cert-manager akan berkomunikasi dengan Let's Encrypt. Untuk contoh ini, tantangan HTTP digunakan. Selama proses tantangan, cert-manager membuat sumber daya HTTPRoute dan pod yang sesuai yang menyajikan endpoint validasi untuk memverifikasi kepemilikan domain.
Tip
Tantangan lain yang didukung oleh Let's Encrypt didokumenkan pada letsencrypt.org - Jenis Tantangan
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
Verifikasi bahwa sumber daya telah dibuat
kubectl get ClusterIssuer -A -o yaml
Status harus menampilkan True dan mengetik 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
Membuat sertifikat
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
Jalankan perintah berikut untuk memvalidasi penerbitan sertifikat. Jika sertifikat telah diterbitkan, nilai READY kolom harus True.
kubectl get certificate letsencrypt-cert -n test-infra
Jika sertifikat tidak diterbitkan, Anda dapat menjalankan perintah berikut untuk memvalidasi status tantangan.
Catatan
Jika sertifikat telah berhasil diterbitkan, tantangan tidak akan lagi tercantum.
kubectl get challenges -n test-infra -o yaml
Mengaktifkan HTTPS pada sumber daya Gateway
Ubah gateway untuk menambahkan pendengar kedua untuk mengakhiri permintaan HTTPS dengan sertifikat Let's Encrypt yang dikeluarkan.
Membuat 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
Catatan
Saat Pengontrol ALB membuat Application Gateway untuk sumber daya kontainer di Azure Resource Manager, pengontrol menggunakan konvensi penamaan berikut untuk sumber daya frontend: fe-<eight randomly generated characters>.
Jika Anda ingin mengubah nama sumber daya frontend yang dibuat di Azure, pertimbangkan untuk mengikuti strategi penyebaran bawaan Anda sendiri.
Membuat HTTPRoute yang mendengarkan nama host Anda
Buat HTTPRoute untuk menangani permintaan yang diterima oleh pendengar https-listener .
Penting
Pastikan Anda mengganti contoso.com dengan nama domain yang Anda harapkan sertifikatnya dikeluarkan.
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
Setelah sumber daya HTTPRoute dibuat, pastikan rute Diterima dan sumber daya Application Gateway for Containers diprogram.
kubectl get httproute cert-manager-route -n test-infra -o yaml
Verifikasi status sumber daya Application Gateway for Containers berhasil diperbarui.
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
Menguji akses ke aplikasi
Sekarang kami siap untuk mengirim beberapa lalu lintas ke aplikasi sampel kami, melalui nama host yang digunakan untuk sertifikat Anda.
Penting
Pastikan Anda mengganti contoso.com dengan nama domain yang Anda harapkan sertifikatnya dikeluarkan.
curl https://contoso.com/ -v 2>&1 | grep issuer
Anda akan melihat output berikut:
* issuer: C=US; O=Let's Encrypt; CN=R10
Selamat, Anda telah menginstal Kontroler ALB, menyebarkan aplikasi backend, mengeluarkan sertifikat dari Let's Encrypt dengan cert-manager, dan merutekan lalu lintas ke aplikasi melalui Application Gateway untuk Container.