支持 TLS 的通配符域:GKE 上的 Kubernetes Ingress
Supporting wildcard domains for TLS: Kubernetes Ingress on GKE
我正在开发一个动态部署 kubernetes 资源的应用程序,我希望能够为所有这些资源提供一个共享的 SSL 证书。在任何给定时间,所有服务都具有路径 *.*.*.example.com
。
我听说 cert-manager 会自动 provision/re-provision 证书,但如果开销太大,我不一定需要自动配置。该解决方案还需要能够处理这些嵌套的 url 子域。
对最简单的方法有什么想法吗?
看看 nginx-ingress, which is a Kubernetes Ingress Controller that essentially makes it possible to run Nginx 反向 proxy/web server/load Kubernetes 上的平衡器。
nginx-ingress 是围绕 Ingress resource. It will watch Ingress objects and manage nginx configuration in config maps. You can define powerful traffic routing rules, caching, url rewriting, and a lot more via the Kubernetes Ingress resource rules and nginx specific annotations.
构建的
这是一个带有一些路由的 Ingress 示例。 and it does support wildcard domain routing.
您还可以用它做更多事情
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/rewrite-target: /
cert-manager.io/cluster-issuer: letsencrypt-prod
name: my-ingress
spec:
rules:
- host: app1.domain.com
http:
paths:
- backend:
serviceName: app1-service
servicePort: http
path: /(.*)
- host: app2.sub.domain.com
http:
paths:
- backend:
serviceName: app2-service
servicePort: http
path: /(.*)
tls:
- hosts:
- app1.domain.com
secretName: app1.domain.com-tls-secret
- hosts:
- app2.sub.domain.com
secretName: app2.sub.domain.com-tls-secret
注释部分非常重要。以上表明 nginx-ingress 应该管理这个 Ingress 定义。此注释部分允许指定额外的 nginx 配置,在上面的示例中,它指定了一个 url 重写目标,可用于重写规则部分中的 urls。
参见 this community post 在 GKE 上安装 nginx-ingress。
您会注意到注释还有一个特定于证书管理器的注释,如果已安装,它将指示证书管理器根据 tls
部分下定义的主机和机密颁发证书。
使用cert-manager结合nginx-ingress,没那么复杂,可以设置自动证书creation/renewals.
很难知道部署动态应用程序的设置的确切性质。但实现配置的一些可能方法是:
- 让每个应用使用自己的路由规则和 TLS 配置定义自己的 Ingress,每次部署应用程序时都会 installed/updated
- 根据 domain/subdomain 有一个 Ingress。然后,您可以指定一个通配符子域和带有该子域路由规则的 tls 部分
- 或者您可能拥有一个处理所有域和路由的超级 Ingress。
粒度越细,控制越多,但活动部件也越多。我不认为这是一个问题。对于最后两个选项,它实际上取决于动态应用程序部署的性质。
我正在开发一个动态部署 kubernetes 资源的应用程序,我希望能够为所有这些资源提供一个共享的 SSL 证书。在任何给定时间,所有服务都具有路径 *.*.*.example.com
。
我听说 cert-manager 会自动 provision/re-provision 证书,但如果开销太大,我不一定需要自动配置。该解决方案还需要能够处理这些嵌套的 url 子域。
对最简单的方法有什么想法吗?
看看 nginx-ingress, which is a Kubernetes Ingress Controller that essentially makes it possible to run Nginx 反向 proxy/web server/load Kubernetes 上的平衡器。
nginx-ingress 是围绕 Ingress resource. It will watch Ingress objects and manage nginx configuration in config maps. You can define powerful traffic routing rules, caching, url rewriting, and a lot more via the Kubernetes Ingress resource rules and nginx specific annotations.
构建的这是一个带有一些路由的 Ingress 示例。 and it does support wildcard domain routing.
您还可以用它做更多事情apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/rewrite-target: /
cert-manager.io/cluster-issuer: letsencrypt-prod
name: my-ingress
spec:
rules:
- host: app1.domain.com
http:
paths:
- backend:
serviceName: app1-service
servicePort: http
path: /(.*)
- host: app2.sub.domain.com
http:
paths:
- backend:
serviceName: app2-service
servicePort: http
path: /(.*)
tls:
- hosts:
- app1.domain.com
secretName: app1.domain.com-tls-secret
- hosts:
- app2.sub.domain.com
secretName: app2.sub.domain.com-tls-secret
注释部分非常重要。以上表明 nginx-ingress 应该管理这个 Ingress 定义。此注释部分允许指定额外的 nginx 配置,在上面的示例中,它指定了一个 url 重写目标,可用于重写规则部分中的 urls。
参见 this community post 在 GKE 上安装 nginx-ingress。
您会注意到注释还有一个特定于证书管理器的注释,如果已安装,它将指示证书管理器根据 tls
部分下定义的主机和机密颁发证书。
使用cert-manager结合nginx-ingress,没那么复杂,可以设置自动证书creation/renewals.
很难知道部署动态应用程序的设置的确切性质。但实现配置的一些可能方法是:
- 让每个应用使用自己的路由规则和 TLS 配置定义自己的 Ingress,每次部署应用程序时都会 installed/updated
- 根据 domain/subdomain 有一个 Ingress。然后,您可以指定一个通配符子域和带有该子域路由规则的 tls 部分
- 或者您可能拥有一个处理所有域和路由的超级 Ingress。
粒度越细,控制越多,但活动部件也越多。我不认为这是一个问题。对于最后两个选项,它实际上取决于动态应用程序部署的性质。