在部署 Web 项目时, SSL 证书的实施是每个工程师都可能面临的共同挑战——我也不例外。
往往,创业初期有限公司会开展兔费技能证件,譬如 Let's Encrypt 展示 的技能证件。并且,某些都还具有优越性性和不良后果地方,上某些开展了详细介绍代表。让我们仔细看看我个人在使用免费证书时遇到的问题:
最近,我一直专注于特定的技术堆栈,并想在 Azure 云提供商的上下文中讨论基于Kubernetes集群的基础架构解决方案。虽然 cert-manager 是该领域的流行解决方案,但我更喜欢通过 Helm 安装它以获得更大的便利。
所以,事不宜迟,让我们开始吧:
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
在第一种情况下,我的 YAML 文件如下所示:
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 >
那么,我们到底有什么?
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 !!!
在讨论了技术方面和配置之后,让我们重新深入研究 Azure 证书的特性。
Azure 展示了不同应用于订货认证证书的高级设置,这不同高级设置均由 GoDaddy 展示:Azure 通配符证书仅保护一级子域。例如,如果我们有一个名为mydomain.com的域,则证书将仅覆盖.mydomain.com形式的一级子域。
因此,证书将适用于service1.mydomain.com、service2.mydomain.com、service3.mydomain.com等资源,但不会涵盖service1.test.mydomain.com或mail.service1.mydomain.com 。
我们有这些抉择呢?第一个选项不太可能实用,因为子域的数量,尤其是二级域的数量可能非常庞大。因此,为每个子域( .service1.mydomain.com、*.dev.mydomain.com… )支付通配符证书并不是最合理的解决方案。
依于2个页面,我同Azure鼓励团队合作就事必来了长事件的交往,真实经历了妥协、伤心和怨恨的全部的时段,后来才认知到资质证书的SAN程度尚未有体现。直至末尾,我都会机会 Azure 终究不容易产生那么的一些问题。比较下面,你们的角逐劲敌 AWS Amazon 经由其 AWS Certificate Manager (ACM) 供应证件,支持软件多至 10 个应急主旨称呼,例如通配符。它不能您加入 10 个拥有通配符 (*) 的子域,恐怕能够 在 AWS 上明确提出不断增加达到 100k 的进口配额。最后的,我将安利该怎样将技能证书与 Azure 上的 Front Door 服务项目通过运行。对我来说,Azure Front Door (AFD) 是一个全球性的可扩展网关,它利用 Microsoft 的全球边缘网络将传入流量定向到适当的端点,这些端点可以是 Web 应用程序或服务。 Front Door 在 HTTP/HTTPS 层(第 7 层)运行,将客户端请求路由到池中可用的应用程序服务器。应用程序的服务器端可以是任何可通过 Internet 访问的服务,无论它托管在 Azure 内部还是外部。
来自文档网站的示例
Azure Front Door 就是一种更方便的设备,可让你平衡性和代理权防问全.球区域式运用过程和的服务于培训的传给客流量。它作为好几个产品系列功效,具有经过配置单原则操作过程、加盟方式和耐火墙装置来激活各种各样原则的技能。在此文中,我没有会渗入研讨 AFD 的服务于培训的小事,即使省级重点分享文凭的的服务于培训性。如你所料,到 Azure Front Door 的传入流量可以是http或https 。如果选择https ,则有三个选项:在 Azure Front Door 服务本身生成证书、上传自己的证书或将现有证书同步到 Azure Key Vault。要允许 Front Door 服务访问 Key Vault,您需要配置必要的权限。
我最好是用到另外某个工具栏并选购一览表版本升级的证明,以减少不得不自動更新时间或立即绘制它。能够相连产自 AKV 的证明,这个世界都要 自功确保一览表壮态。此设置将为您提供以下结果:
处理http流量不是问题,但在设置资源池和指定 AKS 群集的外部 IP 地址时,需要牢记一个微妙的细节。确保将“服务器组件节点标头”字段留空,以确保它自动填充在“IP 或节点名称”字段中输入的值。
这将允许*.mydomain.com格式的所有服务正常运行。完成此配置后,一切就绪。
在某些情况下,通过 https 将流量从 Azure Front Door 重定向到 AKS 可能更有利。为确保 Azure Front Door 在服务器池设置中正常运行,指定与您的 AKS 集群对应的 DNS 名称至关重要,这与 SNI 和健康检查有关。否则,设置将无法运行。
在我的例子中,没有为我的 AKS 集群分配名称,我只有以前直接工作但必须通过 Azure Front Door 运行的服务。为了解决这个问题,我必须为 AKS 集群创建一个单独的 DNS 名称,配置 DNS,并设置一个单独的服务,并将证书附加到入口。只有这样,我才能将https流量重定向到 AKS 集群,并确保它对所有可用服务都能正常工作。
在为 AKS 设有相连限权时充分考虑安会方法很沉要。为确认安会相连,您能能限制仅从 AKS 电脑网络安会组中的 Azure Front Door IP IP地址相连到 AKS 的限权(有以下几点图如图所示)。
由 Social Discovery Group 首席 DevOps 工程师 Pavel Shapurau 撰写