本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
为在 Amazon EKS 上运行的应用程序配置双向 TLS 身份验证
由 Mahendra Siddappa (AWS) 编写
摘要
基于证书的传输层安全性协议(TLS)是一个可选的 TLS 组件,可在服务器和客户端之间提供双向对等身份验证。使用双向 TLS,客户端必须在会话协商过程中提供 X.509 证书。服务器使用此证书来识别和验证客户端。
双向 TLS 是物联网 (IoT) 应用的常见要求,可用于开放银行等 business-to-business应用或标准。
此模式描述如何使用 NGINX 入口控制器为运行在 Amazon Elastic Kubernetes Service(Amazon EKS)集群上的应用程序配置双向 TLS。您可以通过注释入口资源来为 NGINX 入口控制器启用内置的双向 TLS 功能。有关 NGINX 控制器上双向 TLS 注释的更多信息,请参阅 Kubernetes 文档中的客户端证书身份验证
重要
此模式使用自签名证书。我们建议您只在测试集群中使用此功能,而不要在生产环境中使用。如果您想在生产环境中使用此模式,则可以使用 AWS 私有证书颁发机构(AWS Private CA)或您现有的公有密钥基础设施(PKI)标准来颁发私有证书。
先决条件和限制
先决条件
一个 Amazon Web Services(AWS)有效账户。
现有 Amazon EKS 集群。
AWS 命令行界面(AWS CLI)版本 1.7 或更高版本,已在 macOS、Linux 或 Windows 上安装并配置。
已安装并配置的 kubectl 命令行实用程序,以便访问 Amazon EKS 集群。有关这方面的更多信息,请参阅 Amazon EKS 文档中的安装 kubectl。
用于测试应用程序的现有域名系统(DNS)名称。
限制
此模式使用自签名证书。我们建议您只在测试集群中使用此功能,而不要在生产环境中使用。
架构

技术堆栈
Amazon EKS
Amazon Route 53
Kubectl
工具
Amazon Elastic Kubernetes Service (Amazon EKS) 可帮助您在 AWS 上运行 Kubernetes,而无需安装或维护您自己的 Kubernetes 控制面板或节点。
Amazon Route 53 是一种可用性高、可扩展性强的 DNS Web 服务。
Kubectl 是命令行实用程序,用于与 Amazon EKS 集群交互。
操作说明
Task | 描述 | 所需技能 |
---|---|---|
生成 CA 密钥和证书。 | 通过运行以下命令生成证书颁发机构(CA)密钥和证书。
| DevOps 工程师 |
生成服务器密钥和证书,并使用 CA 证书进行签名。 | 通过运行以下命令生成服务器密钥和证书,并使用 CA 证书进行签名。
重要请务必使用现有域名 | DevOps 工程师 |
生成客户端密钥和证书,并使用 CA 证书进行签名。 | 通过运行以下命令生成客户端密钥和证书,并使用 CA 证书进行签名。
| DevOps 工程师 |
Task | 描述 | 所需技能 |
---|---|---|
将 NGINX 入口控制器部署到 Amazon EKS 集群中。 | 使用以下命令部署 NGINX 入口控制器。
| DevOps 工程师 |
验证 NGINX 入口控制器服务正在运行。 | 使用以下命令验证 NGINX 入口控制器服务正在运行。
重要确保服务字段地址包含网络负载均衡器的域名。 | DevOps 工程师 |
Task | 描述 | 所需技能 |
---|---|---|
在 Amazon EKS 集群中创建命名空间。 | 通过运行以下命令在 Amazon EKS 集群中创建名为
这将部署示例应用程序来测试双向 TLS。 | DevOps 工程师 |
Task | 描述 | 所需技能 |
---|---|---|
在 mtls 命名空间中创建 Kubernetes 部署和服务。 | 创建一个名为
通过运行以下命令在
| DevOps 工程师 |
验证已创建 Kubernetes 部署。 | 运行以下命令验证部署是否已创建,且有一个容器组(pod)处于可用状态。
| DevOps 工程师 |
验证是否已创建 Kubernetes 服务。 | 通过运行以下命令验证是否已创建 Kubernetes 服务。
| DevOps 工程师 |
Task | 描述 | 所需技能 |
---|---|---|
创建入口资源的密钥。 | 运行以下命令,使用您之前创建的证书为 NGINX 入口控制器创建密钥。
您的密钥有一个服务器证书供客户端识别服务器,还有一个 CA 证书供服务器验证客户端证书。 | DevOps 工程师 |
Task | 描述 | 所需技能 |
---|---|---|
在 mtls 命名空间中创建入口资源。 | 创建一个名为
通过运行以下命令以在
这意味着 NGINX 入口控制器可以将流量路由到示例应用程序。 | DevOps 工程师 |
验证入口资源是否已创建。 | 通过运行以下命令验证是否已创建入口资源。
重要确保入口资源的地址显示为 NGINX 入口控制器创建的负载均衡器。 | DevOps 工程师 |
Task | 描述 | 所需技能 |
---|---|---|
创建指向 NGINX 入口控制器的负载均衡器的 CNAME 记录。 | 登录 AWS 管理控制台,打开 Amazon Route 53 控制台,然后创建将 有关更多信息,请参阅 Route 53 文档中的使用 Route 53 控制台创建记录。 | DevOps 工程师 |
Task | 描述 | 所需技能 |
---|---|---|
在没有证书的情况下测试双向 TLS 设置。 | 运行以下命令。
您应该收到“400 未发送必需的 SSL 证书”错误响应。 | DevOps 工程师 |
在有证书的情况下测试双向 TLS 设置。 | 运行以下命令。
您应该收到“mTLS 正在运行”的响应。 | DevOps 工程师 |