Khi triển khai một dự án web, việc triển khai chứng chỉ SSL là một thách thức phổ biến mà mọi kỹ sư đều có thể gặp phải – và tôi cũng không ngoại lệ.
Thông thường, các công ty khởi nghiệp chọn chứng chỉ miễn phí như chứng chỉ từ Let's Encrypt. Tuy nhiên, những điều này đi kèm với những hạn chế và sự bất tiện cần xem xét, được trình bày chi tiết trên .Hãy cùng xem xét kỹ hơn các vấn đề mà cá nhân tôi đã gặp phải với các chứng chỉ miễn phí:
Gần đây, tôi đang tập trung vào một nhóm công nghệ cụ thể và muốn thảo luận về giải pháp cơ sở hạ tầng dựa trên cụm Kubernetes trong ngữ cảnh của nhà cung cấp đám mây Azure. Mặc dù trình quản lý chứng chỉ là một giải pháp phổ biến trong lĩnh vực này, nhưng tôi thích cài đặt nó qua Helm hơn để thuận tiện hơn.
Vì vậy, không cần phải quảng cáo thêm, hãy đi sâu vào:
helm repo add jetstack https: //charts.jetstack.io
helm repo update kubectl apply -f https: //github.com/jetstack/cert-manager/releases/download/v1.6.1/cert-manager.crds.yaml
helm install cert-manager jetstack/cert-manager -- namespace cert - manager -- create - namespace -- version v1 . 6 . 1
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt-cluster-issuer
spec:
acme:
server: //acme-v02.api.letsencrypt.org/directory
email: p…[email protected] #your e-mail
privateKeySecretRef:
name: letsencrypt-cluster-issuer
solvers:
- http01:
ingress:
class: nginx
Trong kịch bản đầu tiên, các tệp YAML của tôi trông như thế này:
apiVersion: cert-manager.io/v1 kind: Certificate metadata: name: myservice2 namespace : test
Spec : duration : 2160h
renewBefore : 72h
dnsNames : - myservice2 . mydomain . org # you resources
secretName : myservice2 - tls
issuerRef : name : letsencrypt - cluster - issuer
kind : ClusterIssuer
kubectl describe certificates <cert name > -n <namespace name >
Vì vậy, những gì chúng ta có cuối cùng?
annotations : cert-manager .io/cluster-issuer: "letsencrypt-cluster-issuer" cert-manager .io/renew-before: 72h
az aks show -g < RG > -n < AKS_name >
az keyvault set-policy --name < name AKV > --object-id < get from first step value > --secret-permissions get
apiVersion: spv.no/v1 kind: AzureKeyVaultSecret metadata: name: wildcard-cert #any name namespace : default
spec : vault : name : SandboxKeyVault # name you keyvault in Azure
object : name : name_object_id # name object id from Azure AKV this cert
type : secret
output : secret : name : wildcard - cert # any name for secret in your namespace
type : kubernetes . io / tls
chainOrder : ensureserverfirst # very important values !!!
Sau khi đã thảo luận về các khía cạnh kỹ thuật và cấu hình, hãy quay lại tìm hiểu các đặc thù của chứng chỉ Azure.
Azure cung cấp hai tùy chọn để yêu cầu chứng chỉ, cả hai đều do GoDaddy cung cấp:Chứng chỉ Azure Wildcard chỉ bảo vệ các tên miền phụ cấp một. Chẳng hạn, nếu chúng tôi có một miền có tên mydomain.com , chứng chỉ sẽ chỉ bao gồm các miền phụ cấp một ở dạng .mydomain.com .
Do đó, chứng chỉ sẽ hoạt động đối với các tài nguyên như service1.mydomain.com, service2.mydomain.com, service3.mydomain.com nhưng sẽ không áp dụng cho service1.test.mydomain.com hoặc mail.service1.mydomain.com .
Chúng ta có những lựa chọn nào sau đó?Tùy chọn đầu tiên không khả thi vì số lượng tên miền phụ, đặc biệt là những tên miền ở cấp độ thứ hai, có thể rất lớn. Do đó, trả tiền để có được chứng chỉ ký tự đại diện cho mỗi tên miền phụ ( .service1.mydomain.com, *.dev.mydomain.com… ) không phải là giải pháp hợp lý nhất.
Đối với tùy chọn thứ hai, tôi đã có một cuộc trò chuyện dài với nhóm hỗ trợ Azure về vấn đề này, trải qua tất cả các giai đoạn từ chối, thất vọng và tức giận, chỉ để cuối cùng nhận ra rằng khả năng SAN cho các chứng chỉ vẫn chưa được triển khai. Cho đến cuối cùng, tôi đã hy vọng rằng sự cố như vậy sẽ không bao giờ xảy ra trên Azure. Ngược lại, đối thủ cạnh tranh của họ, AWS Amazon, cung cấp chứng chỉ thông qua Trình quản lý chứng chỉ AWS (ACM) hỗ trợ tối đa 10 tên chủ đề thay thế, bao gồm cả ký tự đại diện. Nó cho phép bạn tạo 10 miền phụ với ký tự đại diện (*) và thậm chí yêu cầu tăng hạn ngạch trên AWS lên tới 100k. Để kết thúc, tôi sẽ chia sẻ cách bạn có thể sử dụng chứng chỉ với dịch vụ Cửa trước trên Azure.Đối với tôi, Azure Front Door (AFD) là một cổng toàn cầu và có thể mở rộng, tận dụng mạng biên toàn cầu của Microsoft để hướng lưu lượng truy cập đến các điểm cuối thích hợp, có thể là các ứng dụng hoặc dịch vụ web. Hoạt động ở lớp HTTP/HTTPS (lớp 7), Front Door định tuyến các yêu cầu của máy khách đến một máy chủ ứng dụng khả dụng từ nhóm. Phía máy chủ của ứng dụng có thể là bất kỳ dịch vụ nào có thể truy cập Internet, cho dù dịch vụ đó được lưu trữ bên trong hay bên ngoài Azure.
Một ví dụ từ trang web tài liệu
Azure Front Door là một công cụ tiện lợi cho phép bạn cân bằng và ủy quyền lưu lượng truy cập đến truy cập vào các ứng dụng và dịch vụ được phân phối trên toàn thế giới. Nó cung cấp một loạt các tính năng bao gồm khả năng liên kết các quy tắc khác nhau bằng cách định cấu hình trình xử lý quy tắc, tham gia chính sách và cài đặt tường lửa. Tôi sẽ không đi sâu vào các chi tiết cụ thể của dịch vụ AFD trong bài viết này mà sẽ tập trung vào các đặc thù dịch vụ của chứng chỉ.Như bạn có thể mong đợi, lưu lượng truy cập đến Azure Front Door có thể là http hoặc https . Nếu chọn https , bạn có ba tùy chọn: tạo chứng chỉ trên chính dịch vụ Azure Front Door, tải chứng chỉ của riêng bạn lên hoặc đồng bộ hóa chứng chỉ hiện có của bạn với Azure Key Vault. Để cho phép dịch vụ Cửa trước truy cập Kho lưu trữ khóa, bạn cần định cấu hình các quyền cần thiết.
Tôi khuyên bạn nên sử dụng tùy chọn cuối cùng và chọn phiên bản mới nhất của chứng chỉ để tránh phải gia hạn hoặc tạo lại thủ công. Bằng cách kết nối chứng chỉ từ AKV, mọi thứ sẽ tự động cập nhật.Thiết lập này sẽ cung cấp cho bạn kết quả như sau:
Xử lý lưu lượng truy cập http không phải là vấn đề, nhưng có một chi tiết tinh tế cần lưu ý khi thiết lập nhóm tài nguyên và chỉ định địa chỉ IP bên ngoài của cụm AKS. Đảm bảo để trống trường "tiêu đề nút thành phần máy chủ" để đảm bảo rằng trường này được tự động điền các giá trị được nhập vào trường "IP hoặc tên nút".
Điều này sẽ cho phép tất cả các dịch vụ ở định dạng *.mydomain.com hoạt động bình thường. Khi bạn đã hoàn thành cấu hình này, bạn đã hoàn tất.
Trong một số trường hợp nhất định, việc chuyển hướng lưu lượng truy cập từ Azure Front Door sang AKS thông qua https có thể thuận lợi hơn. Để đảm bảo Azure Front Door hoạt động chính xác trong cài đặt nhóm máy chủ, điều quan trọng là phải chỉ định tên DNS tương ứng với cụm AKS của bạn , có liên quan đến SNI và kiểm tra tình trạng. Nếu không, thiết lập sẽ không hoạt động.
Trong trường hợp của tôi, không có tên nào được gán cho cụm AKS của tôi, tôi chỉ có các dịch vụ trước đây hoạt động trực tiếp nhưng phải hoạt động thông qua Azure Front Door. Để giải quyết vấn đề này, tôi phải tạo một tên DNS riêng cho cụm AKS, định cấu hình DNS và thiết lập một dịch vụ riêng có chứng chỉ được đính kèm với mục nhập. Chỉ sau đó, tôi mới có thể chuyển hướng lưu lượng truy cập https đến các cụm AKS và đảm bảo rằng nó hoạt động chính xác cho tất cả các dịch vụ có sẵn.
Điều quan trọng là phải xem xét các biện pháp bảo mật trong khi thiết lập quyền kết nối cho AKS. Để đảm bảo kết nối an toàn, bạn có thể giới hạn quyền kết nối với AKS chỉ từ các địa chỉ IP Azure Front Door trong Nhóm bảo mật mạng cho AKS (như minh họa trong hình bên dưới).
Viết bởi Pavel Shapurau, Trưởng nhóm kỹ sư DevOps, Social Discovery Group