帮助改进此页面
想为本用户指南做出贡献? 滚动到页面底部,然后选择在 GitHub 上编辑此页面。您的贡献有助于我们的用户指南为每个人提供更充分的参考。
在 AWS Outposts 上准备本地 Amazon EKS 集群以防断网
如果本地网络断开与 AWS Cloud 的连接,您可以继续在 Outpost 上使用本地 Amazon EKS 集群。本主题介绍如何针对网络断开连接的情况准备本地集群以及相关注意事项。
针对网络断开连接的情况准备本地集群时的注意事项:
-
本地集群可在临时、计划外网络断开连接期间实现稳定性和持续操作。AWS Outposts 仍是一个完全连接的产品,充当您的数据中心内 AWS Cloud 的扩展。当 Outpost 与 AWS Cloud 之间的网络断开连接,我们建议您尝试恢复连接。如需查看相关说明,请参阅《AWS Outposts 用户指南》中的 AWS Outposts 机架网络故障排除清单。有关如何对本地集群的问题进行故障排除的更多信息,请参阅 排查 AWS Outposts 上的本地 Amazon EKS 集群问题。
-
Outpost 将发出一个
ConnectedStatus
指标,您可用于监控 Outpost 的连接状态。有关更多信息,请参阅《AWS Outposts 用户指南》中的 Outposts 指标。 -
本地集群使用 IAM 作为默认身份验证机制,该身份验证机制将 AWS Identity and Access Management 身份验证器用于 Kubernetes
。IAM 在网络连接断开期间不可用。因此,本地集群支持使用 x.509
证书的替代身份验证机制,您可以使用该机制在网络连接断开期间连接到集群。有关如何获取x.509
证书并将其用于您的集群的信息,请参阅 在网络断开连接期间对您的本地集群进行身份验证。 -
如果您在网络连接断开期间无法访问 Route 53,请考虑在您的本地环境中使用本地 DNS 服务器。Kubernetes 控制面板实例使用静态 IP 地址。您可以使用端点主机名和 IP 地址配置用于连接到您的集群的主机,作为使用本地 DNS 服务器的替代方法。有关更多信息,请参阅 AWS Outposts 用户指南中的 DNS。
-
如果您预计在网络连接断开期间应用程序流量会增加,则可以在连接到云时在您的集群中预调配备用计算容量。Amazon EC2 实例包含在 AWS Outposts 的价格中。因此,运行备用实例不会影响您的 AWS 用量成本。
-
在网络连接断开期间,要启用工作负载的创建、更新和扩缩操作,必须可以通过本地网络访问您的应用程序的容器映像,并且您的集群必须具有足够的容量。本地集群不会为您托管容器注册表。如果 Pods 之前已在节点上运行过,则容器映像将缓存在这些节点上。如果您通常从云中的 Amazon ECR 提取应用程序的容器映像,建议运行本地缓存或注册表。如果您需要在网络连接断开期间创建、更新和扩展工作负载资源的操作,那么本地缓存或注册表会很有帮助。
-
本地集群使用 Amazon EBS 作为持久卷的默认存储类,并使用 Amazon EBS CSI 驱动程序来管理 Amazon EBS 持久卷的生命周期。网络连接断开期间,由 Amazon EBS 备份的 Pods 将无法创建、更新或扩展。这是因为这些操作需要调用云端的 Amazon EBS API。如果您在本地集群上部署有状态工作负载,并且需要在网络断开连接期间执行创建、更新或扩缩操作,请考虑使用替代存储机制。
-
如果 AWS Outposts 无法访问相关 AWS 区域内 API(例如 Amazon EBS 或 Amazon S3 的 API),则无法创建或删除 Amazon EBS 快照。
-
将 ALB(Ingress)与 AWS Certificate Manager(ACM)集成时,证书会被推送并存储在 AWS Outposts ALB 计算实例的内存中。如果与 AWS 区域断开连接,当前的 TLS 终止将继续运行。在这种情况下,更改操作将失败(例如新的传入定义、新的基于 ACM 的证书 API 操作、ALB 计算扩展或证书轮换)。有关更多信息,请参阅《AWS Certificate Manager 用户指南》中的排查托管证书续订的问题。
-
在网络断开连接期间,Amazon EKS 控制面板日志将本地缓存在 Kubernetes 控制面板实例上。重新连接后,会将这些日志发送到父级 AWS 区域 中的 CloudWatch 日志。您可以使用 Prometheus
、Grafana 或 Amazon EKS 合作伙伴解决方案,使用 Kubernetes API 服务器的指标端点或将 Fluent Bit 用于日志,以在本地监控集群。 -
如果您将 Outpost 上的 AWS Load Balancer Controller 用于应用程序流量,则在网络连接断开期间,前面带有 AWS Load Balancer Controller 的现有 Pods 将继续接收流量。在网络断开连接期间创建的新 Pods 不会接收流量,直到 Outpost 重新连接到 AWS Cloud 为止。考虑在连接到 AWS Cloud 时为您的应用程序设置副本计数,以满足您在网络断开连接期间的扩缩需求。
-
Amazon VPC CNI plugin for Kubernetes 默认为辅助 IP 模式
。它配置为 WARM_ENI_TARGET
=1
,这将允许插件保持可用 IP 地址的“完全弹性网络接口”。考虑在断开连接状态下根据您的扩缩需求更改WARM_ENI_TARGET
、WARM_IP_TARGET
和MINIMUM_IP_TARGET
值。有关更多信息,请参阅 GitHub 上插件的readme
文件。有关每种实例类型支持的 Pods 最大数量列表,请参阅 GitHub 上的 eni-max-pods.txt
文件。
在网络断开连接期间对您的本地集群进行身份验证
AWS Identity and Access Management(IAM)在网络连接断开期间不可用。在断开连接时,您将无法使用 IAM 凭证对您的本地集群进行身份验证。但是,在断开连接时,您可以使用 x509
证书通过本地网络连接到集群。您需要下载并存储客户端 X509
证书,以便在断开连接期间使用。在本主题中,您将学习在集群处于断开连接状态时,如何创建和使用证书对其进行身份验证。
-
创建证书签名请求。
-
生成证书签名请求。
openssl req -new -newkey rsa:4096 -nodes -days 365 \ -keyout admin.key -out admin.csr -subj "/CN=admin"
-
在 Kubernetes 中创建证书签名请求。
BASE64_CSR=$(cat admin.csr | base64 -w 0) cat << EOF > admin-csr.yaml apiVersion: certificates.k8s.io/v1 kind: CertificateSigningRequest metadata: name: admin-csr spec: signerName: kubernetes.io/kube-apiserver-client request: ${BASE64_CSR} usages: - client auth EOF
-
-
使用
kubectl
创建证书签名请求。kubectl create -f admin-csr.yaml
-
检查证书签名请求的状态。
kubectl get csr admin-csr
示例输出如下。
NAME AGE REQUESTOR CONDITION admin-csr 11m kubernetes-admin Pending
Kubernetes 已创建证书签名请求。
-
批准证书签名请求。
kubectl certificate approve admin-csr
-
重新检查证书签名请求状态是否为已批准。
kubectl get csr admin-csr
示例输出如下。
NAME AGE REQUESTOR CONDITION admin-csr 11m kubernetes-admin Approved
-
检索并验证证书。
-
检索证书。
kubectl get csr admin-csr -o jsonpath='{.status.certificate}' | base64 --decode > admin.crt
-
验证证书。
cat admin.crt
-
-
为
admin
用户创建集群角色绑定。kubectl create clusterrolebinding admin --clusterrole=cluster-admin \ --user=admin --group=system:masters
-
为断开连接状态生成用户范围的 kubeconfig。
您可以使用已下载的
admin
证书生成kubeconfig
文件。替换以下命令中的my-cluster
和apiserver-endpoint
。aws eks describe-cluster --name
my-cluster
\ --query "cluster.certificateAuthority" \ --output text | base64 --decode > ca.crtkubectl config --kubeconfig
admin.kubeconfig
set-clustermy-cluster
\ --certificate-authority=ca.crt --serverapiserver-endpoint
--embed-certskubectl config --kubeconfig
admin.kubeconfig
set-credentials admin \ --client-certificate=admin.crt --client-key=admin.key --embed-certskubectl config --kubeconfig
admin.kubeconfig
set-context admin@my-cluster
\ --clustermy-cluster
--user adminkubectl config --kubeconfig
admin.kubeconfig
use-context admin@my-cluster
-
查看您的
kubeconfig
文件。kubectl get nodes --kubeconfig
admin.kubeconfig
-
如果您的 Outpost 上已有投入生产中的服务,请跳过此步骤。如果 Amazon EKS 是在您的 Outpost 上运行的唯一服务,并且 Outpost 当前未投入生产,则您可以模拟网络断开连接。在使用本地集群投入生产之前,请模拟断开连接,以确保在集群处于断开连接状态时可以访问该集群。
-
在将您的 Outpost 连接到 AWS 区域 的联网设备上应用防火墙规则。这将断开 Outpost 的服务链接。您无法创建任何新实例。当前正在运行的实例将断开与 AWS 区域 和互联网的连接。
-
您可以使用
x509
证书在断开连接时测试与您的本地集群的连接。确保将kubeconfig
更改为您在上一步创建的admin.kubeconfig
。将my-cluster
替换为您的本地集群的名称。kubectl config use-context admin@
my-cluster
--kubeconfigadmin.kubeconfig
如果您在本地集群处于断开连接状态时发现其存在任何问题,则我们建议开具支持票证。
-