为网络断开连接做好准备 - Amazon EKS
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

为网络断开连接做好准备

如果您的本地网络已经断开与 Amazon Web Services 云 的连接,您可以继续在 Outpost 上使用您的本地 Amazon EKS 集群。本主题介绍了为您的本地集群处于断开连接状态做好准备的一些重要注意事项

注意事项

  • 本地集群可在临时、计划外网络断开连接期间实现稳定性和持续操作。Amazon Outposts 仍是一个完全连接的产品,充当您的数据中心内 Amazon Web Services 云 的扩展。如果您的 Outpost 与 Amazon Web Services 云 之间的网络断开连接,您应该按照《Amazon Outposts 用户指南》中的 Amazon Outposts 机架网络故障排除清单尝试恢复您的连接。有关如何排除本地集群的问题,请参阅 对 Amazon Outposts 上的 Amazon EKS 的本地集群进行故障排除

  • Outpost 将发出一个 ConnectedStatus 指标,您可用于监控 Outpost 的连接状态。有关更多信息,请参阅《Amazon Outposts 用户指南》中的 Outpost 指标

  • 本地集群使用 IAM 作为默认身份验证机制,该身份验证机制将 Amazon Identity and Access Management 身份验证器用于 Kubernetes。由于 IAM 在网络断开连接期间不可用,因此本地集群支持使用 x.509 证书的替代身份验证机制,您可以使用该机制在网络断开连接期间连接到集群。有关如何获取 x.509 证书并将其用于您的集群的信息,请参阅 在网络断开连接期间对您的本地集群进行身份验证

  • 如果您在网络断开连接期间无法访问 Route 53,请考虑在您的本地环境中使用本地 DNS 服务器。Kubernetes 控制面板实例使用静态 IP 地址。您可以使用端点主机名和 IP 地址配置用于连接到您的集群的主机,作为使用本地 DNS 服务器的替代方法。有关更多信息,请参阅《Amazon Outposts 用户指南》中的 DNS

  • 如果您预计在网络断开连接期间应用程序流量会增加,则可以在连接到云时在您的集群中预调配备用计算容量。Amazon EC2 实例包含在 Amazon Outposts 的价格中,因此运行备用实例不会影响您的 Amazon 使用成本。

  • 在网络断开连接期间,要启用工作负载的创建、更新和扩缩操作,必须可以通过本地网络访问您的应用程序的容器映像,并且您的集群必须具有足够的容量。本地集群不会为您托管容器注册表。如果容器组 (pod) 之前已在节点上运行过,则容器映像将缓存在这些节点上。如果您通常从云中的 Amazon ECR 拉取应用程序的容器映像,则在网络断开连接期间需要对工作负载资源执行创建、更新和扩缩操作时,请考虑运行本地缓存或注册表。

  • 本地集群使用 Amazon EBS 作为持久卷的默认存储类,并使用 Amazon EBS CSI 驱动程序来管理 Amazon EBS 持久卷的生命周期。在网络断开连接期间,无法创建、更新或扩缩由 Amazon EBS 支持的 pods,因为这些操作需要调用云中的 Amazon EBS API。如果您在本地集群上部署有状态工作负载,并且需要在网络断开连接期间执行创建、更新或扩缩操作,请考虑使用替代存储机制。

  • 在网络断开连接期间,Amazon EKS 控制面板日志将本地缓存在 Kubernetes 控制面板实例上。重新连接后,会将这些日志发送到父级 Amazon Web Services 区域 中的 CloudWatch 日志。您可以使用自己选择的工具(如 Prometheus、Grafana)和 Amazon EKS 合作伙伴解决方案,使用 Kubernetes API 服务器的指标端点或将 Fluent Bit 用于日志,在本地监控集群。

  • 如果您将 Outpost 上的 Amazon Load Balancer Controller 用于应用程序流量,则在网络断开连接期间,前面带有 Amazon Load Balancer Controller 的现有容器组 (pod) 将继续接收流量。在网络断开连接期间创建的新容器组 (pod) 不会接收流量,直到 Outpost 重新连接到 Amazon Web Services 云 为止。考虑在连接到 Amazon Web Services 云 时为您的应用程序设置副本计数,以满足您在网络断开连接期间的扩缩需求。

  • Amazon VPC CNI plugin for Kubernetes 默认为辅助 IP 模式。它配置有 WARM_ENI_TARGET=1,这将允许插件保持可用IP地址的“完全弹性网络接口”。考虑在断开连接状态下根据您的扩缩需求更改 WARM_ENI_TARGETWARM_IP_TARGETMINIMUM_IP_TARGET 值。有关更多信息,请参阅 GitHub 上插件的 readme 文件。有关每种实例类型支持的容器组 (pod) 的最大数量的列表,请参阅 GitHub 上的 eni-max-pods.txt 文件。

在网络断开连接期间对您的本地集群进行身份验证

Amazon Identity and Access Management 在网络断开连接期间不可用。在断开连接时,您将无法使用 IAM 凭证对您的本地集群进行身份验证。在断开连接时,您可以使用 x509 证书通过您的本地网络连接到您的集群。您需要下载并存储客户端 X509 证书,以便在断开连接期间使用。在本主题中,你将学习如何创建和使用证书在您的集群处于断开连接状态时对其进行身份验证。

  1. 创建证书签名请求。

    1. 生成证书签名请求。

      openssl req -new -newkey rsa:4096 -nodes -days 365 \ -keyout admin.key -out admin.csr -subj "/CN=admin"
    2. 在 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
  2. 使用 kubectl 创建证书签名请求。

    kubectl create -f admin-csr.yaml
  3. 检查证书签名请求的状态。

    kubectl get csr admin-csr

    输出示例如下。

    NAME AGE REQUESTOR CONDITION admin-csr 11m kubernetes-admin Pending

    Kubernetes 已创建证书签名请求。

  4. 批准证书签名请求。

    kubectl certificate approve admin-csr
  5. 重新检查证书签名请求状态是否为已批准。

    kubectl get csr admin-csr

    输出示例如下。

    NAME AGE REQUESTOR CONDITION admin-csr 11m kubernetes-admin Approved
  6. 检索并验证证书。

    1. 检索证书。

      kubectl get csr admin-csr -o jsonpath='{.status.certificate}' | base64 --decode > admin.crt
    2. 验证证书。

      cat admin.crt
  7. admin 用户创建集群角色绑定。

    kubectl create clusterrolebinding admin --clusterrole=cluster-admin \ --user=admin --group=system:masters
  8. 为断开连接状态生成用户范围的 kubeconfig。

    您可以使用已下载的 admin 证书生成 kubeconfig 文件。替换以下命令中的 my-clusterapiserver-endpoint

    aws eks describe-cluster --name my-cluster \ --query "cluster.certificateAuthority" \ --output text | base64 --decode > ca.crt
    kubectl config --kubeconfig admin.kubeconfig set-cluster my-cluster \ --certificate-authority=ca.crt --server apiserver-endpoint --embed-certs
    kubectl config --kubeconfig admin.kubeconfig set-credentials admin \ --client-certificate=admin.crt --client-key=admin.key --embed-certs
    kubectl config --kubeconfig admin.kubeconfig set-context admin@my-cluster \ --cluster my-cluster --user admin
    kubectl config --kubeconfig admin.kubeconfig use-context admin@my-cluster
  9. 查看您的 kubeconfig 文件。

    kubectl get nodes --kubeconfig admin.kubeconfig
  10. 如果您的 Outpost 上已有投入生产中的服务,请跳过此步骤。如果 Amazon EKS 是在您的 Outpost 上运行的唯一服务,并且 Outpost 当前未投入生产,则您可以模拟网络断开连接。在使用本地集群投入生产之前,您可以模拟断开连接,以确保在集群处于断开连接状态时仍然可以访问该集群。

    1. 在将您的 Outpost 连接到 Amazon Web Services 区域 的联网设备上应用防火墙规则。这将断开 Outpost 的服务链接。您无法创建任何新实例。当前正在运行的实例将断开与 Amazon Web Services 区域 和互联网的连接。

    2. 您可以使用 x509 证书在断开连接时测试与您的本地集群的连接。确保将您的 kubeconfig 更改为您在上一步创建的 admin.kubeconfig。将 my-cluster 替换为您的本地集群的名称。

      kubectl config use-context admin@my-cluster --kubeconfig admin.kubeconfig

    如果您在本地集群处于断开连接状态时发现其存在任何问题,则我们建议打开支持票证。