.Net Core 微服务:在 Azure (AKS) 上的 Kubernetes 上使用 HTTPS
.Net Core microservices: using HTTPS on Kubernetes on Azure (AKS)
我正在对各种 .NET 核心 API 项目进行容器化,并使用 Linux 运行将它们集成到 Kubernetes 集群中。我对这种情况相当陌生(我通常将应用程序服务与 Windows 一起使用)并且开始出现有关安全连接最佳实践的问题:
因为这些将 运行 作为集群内部的 pods 我的假设是我只需要暴露端口 80 正确吗?这是由服务和入口管理的所有内部流量。但这是一个好习惯吗?一旦我使用证书配置域并且安全流量开始访问 运行ning pod,是否会出现问题?
当集成 SSL 的时候,我将不得不担心在容器上打开端口 443 或管理容器本身内的任何证书,或者这一切都将由 Ingress、Services (或应用程序网关,因为我使用的是 AKS)?现在,当我需要使用 HTTPS 在本地进行测试时,我必须向容器添加一个自签名证书并打开端口 443,我的假设是这不应该用于生产!
当我部署到我的集群(我使用的是 AKS)时,只打开了端口 80 并分配了一个 LoadBalancer 服务,我得到了一个 Public IP 地址。我习惯于使用 Azure 应用服务,您可以在其中直接使用全局 Miscrosoft SSL 证书,如下所示:https://your-app.azurewebsites.net 但是当我转到 Public IP 并为以下内容配置 DNS 标签:
your-app.southcentralus.cloudapp.azure.com 它不允许我像应用服务那样使用 HTTPS。 IP地址也没有。也许我的 Kubernetes 实例没有正确配置?
由于其中许多服务将 public 面向 API 端点(但由客户端应用程序使用),因此它们不需要自定义域名因为他们不会被大多数 public 看到。有没有办法利用与 IP 地址或 .cloudapp.azure.com 域的安全连接?如果我必须为我的每项服务管理证书,那将是 cost/time 令人望而却步的!
这取决于您要在何处终止 TLS。对于大多数用例,入口控制器是终止 TLS 流量并将所有内容保留在集群内的 HTTP 上的好地方。在这种情况下,任何 HTTP 端口都应该可以正常工作。如果默认情况下 Dotnet 核心公开了端口 80,那么您应该保留它。
您正在本地打开端口 443,因为您没有配置入口控制器。您也可以在本地安装入口。在生产环境中,只要入口控制器正在处理 TLS 流量,您就不需要打开除单个 HTTP 端口之外的任何其他端口。
理想情况下,您不应将每个服务都公开为负载均衡器。服务应该是 ClusterIP
类型,只暴露在集群内部。当您部署入口控制器时,它将创建一个负载均衡器服务。那将是集群中唯一的入口点。然后,入口控制器将通过主机名或路径接受流量并将其路由到各个服务。
Let's Encrypt 是一项免费的 TLS 证书签名服务,可用于您的设置。如果您不拥有该域名,您可以使用 https-01 质询来验证您的身份并获取证书。 Cert Manager 项目使得在任何 k8s 集群中配置 Let's Encrypt 证书变得容易。
- https://cert-manager.io/docs/installation/kubernetes/
- https://cert-manager.io/docs/tutorials/acme/ingress/(如果你使用
kubectl
或helm3部署,请忽略Tillter部分)
边栏:如果您使用应用程序网关来处理您的应用程序,请考虑使用 Application Gateway Ingress Controller
我正在对各种 .NET 核心 API 项目进行容器化,并使用 Linux 运行将它们集成到 Kubernetes 集群中。我对这种情况相当陌生(我通常将应用程序服务与 Windows 一起使用)并且开始出现有关安全连接最佳实践的问题:
因为这些将 运行 作为集群内部的 pods 我的假设是我只需要暴露端口 80 正确吗?这是由服务和入口管理的所有内部流量。但这是一个好习惯吗?一旦我使用证书配置域并且安全流量开始访问 运行ning pod,是否会出现问题?
当集成 SSL 的时候,我将不得不担心在容器上打开端口 443 或管理容器本身内的任何证书,或者这一切都将由 Ingress、Services (或应用程序网关,因为我使用的是 AKS)?现在,当我需要使用 HTTPS 在本地进行测试时,我必须向容器添加一个自签名证书并打开端口 443,我的假设是这不应该用于生产!
当我部署到我的集群(我使用的是 AKS)时,只打开了端口 80 并分配了一个 LoadBalancer 服务,我得到了一个 Public IP 地址。我习惯于使用 Azure 应用服务,您可以在其中直接使用全局 Miscrosoft SSL 证书,如下所示:https://your-app.azurewebsites.net 但是当我转到 Public IP 并为以下内容配置 DNS 标签: your-app.southcentralus.cloudapp.azure.com 它不允许我像应用服务那样使用 HTTPS。 IP地址也没有。也许我的 Kubernetes 实例没有正确配置?
由于其中许多服务将 public 面向 API 端点(但由客户端应用程序使用),因此它们不需要自定义域名因为他们不会被大多数 public 看到。有没有办法利用与 IP 地址或 .cloudapp.azure.com 域的安全连接?如果我必须为我的每项服务管理证书,那将是 cost/time 令人望而却步的!
这取决于您要在何处终止 TLS。对于大多数用例,入口控制器是终止 TLS 流量并将所有内容保留在集群内的 HTTP 上的好地方。在这种情况下,任何 HTTP 端口都应该可以正常工作。如果默认情况下 Dotnet 核心公开了端口 80,那么您应该保留它。
您正在本地打开端口 443,因为您没有配置入口控制器。您也可以在本地安装入口。在生产环境中,只要入口控制器正在处理 TLS 流量,您就不需要打开除单个 HTTP 端口之外的任何其他端口。
理想情况下,您不应将每个服务都公开为负载均衡器。服务应该是
ClusterIP
类型,只暴露在集群内部。当您部署入口控制器时,它将创建一个负载均衡器服务。那将是集群中唯一的入口点。然后,入口控制器将通过主机名或路径接受流量并将其路由到各个服务。Let's Encrypt 是一项免费的 TLS 证书签名服务,可用于您的设置。如果您不拥有该域名,您可以使用 https-01 质询来验证您的身份并获取证书。 Cert Manager 项目使得在任何 k8s 集群中配置 Let's Encrypt 证书变得容易。
- https://cert-manager.io/docs/installation/kubernetes/
- https://cert-manager.io/docs/tutorials/acme/ingress/(如果你使用
kubectl
或helm3部署,请忽略Tillter部分)
边栏:如果您使用应用程序网关来处理您的应用程序,请考虑使用 Application Gateway Ingress Controller