使用 kubectl 或 eksctl 连接到现有 EKS 集群

Tuh*_*dal 1 kubectl amazon-eks eksctl

我在 EKS 上创建了一个 kubernetes 集群。我使用 eksctl create cluster 创建集群。我能够访问一切是伟大的。

但是,我的同事创建了另一个集群,我想知道如何生成/获取 cobeconfigs 以便我可以指向我的同事创建的集群。

Chi*_*wal 6

有两种方法可以获得 kubeconfig。

  1. aws eks update-kubeconfig --name <clustername> --region <region>
  2. eksctl utils write-kubeconfig --cluster=<clustername>

前提是您在同一帐户上拥有 EKS 并且您可以看到。

一旦你获得了 kubeconfig,如果你有访问权限,那么你就可以开始使用 kubectl。

如果您没有访问权限,则需要请求所有者授予您对集群的用户 ID 权限。

此处列出完整的详细信息


Mal*_*ata 1

访问私有 API 服务器

\n\n

如果您禁用了集群的 Kubernetes API 服务器终端节点的公共访问,则您只能从 VPC 或 连接的网络内访问 API 服务器。以下是访问 Kubernetes API 服务器端点的几种可能方法:

\n\n
    \n
  • 连接网络\xe2\x80\x93 使用AWS 中转网关 或其他 连接选项 将您的网络连接到 VPC ,然后使用连接网络中的计算机。您必须确保您的 Amazon EKS 控制平面安全组包含允许来自连接网络的端口 443 上的入口流量的规则。

  • \n
  • Amazon EC2 堡垒主机 \xe2\x80\x93 您可以在集群 VPC 中的公有子网中启动 Amazon EC2 实例,然后通过 SSH 登录到该实例以运行 kubectl 命令。有关更多信息,请参阅 AWS 上的 Linux 堡垒主机。您必须确保您的 Amazon EKS 控制平面安全组包含允许来自堡垒主机的端口 443 上的入口流量的规则。有关更多信息,请参阅 Amazon EKS 安全组注意事项

    \n\n

    当您配置 kubectl 堡垒主机时,请务必使用已映射到集群的 RBAC 配置的 AWS 凭证,或者在删除终端节点公共访问权限之前将堡垒将使用的 IAM 用户或角色添加到 RBAC 配置。有关更多信息,请参阅 管理集群的用户或 IAM 角色未经授权或访问被拒绝 (kubectl)

  • \n
  • AWS Cloud9 IDE \xe2\x80\x93 AWS Cloud9 是一个基于云的集成开发环境 (IDE),让您只需使用浏览器即可编写、运行和调试代码。您可以在集群的 VPC 中创建 AWS Cloud9 IDE 并使用该 IDE 与集群进行通信。有关更多信息,请参阅 在 AWS Cloud9 中创建环境。您必须确保您的 Amazon EKS 控制平面安全组包含允许来自 IDE 安全组的端口 443 上的入口流量的规则。有关更多信息,请参阅 Amazon EKS 安全组注意事项

    \n\n

    当您配置 kubectl AWS Cloud9 IDE 时,请务必使用已映射到集群的 RBAC 配置的 AWS 凭证,或者在删除终端节点公共访问权限之前将 IDE 将使用的 IAM 用户或角色添加到 RBAC 配置中。有关更多信息,请参阅 管理集群的用户或 IAM 角色未经授权或访问被拒绝 (kubectl)。\n请查看此处:eks-endpoints-access

  • \n
\n\n

通过多个集群隔离

\n\n

可能的替代方案是使用多个单租户 Amazon EKS 集群。通过此策略,每个租户都可以在共享 AWS 帐户中使用自己的 Kubernetes 集群,或者在大型企业的组织内使用专用帐户。\n部署集群后,您可能希望了解所有已部署集群的概览,以监控每个租户,确保我们正在运行最新版本的 EKS 控制平面并大规模运行。Rancher 是一种流行的开源工具,用于管理多个 Kubernetes 集群,请务必查看 开源博客上的这篇文章, 了解有关如何部署和使用它的详细信息。

\n\n

同一VPC内的集群

\n\n

如果您同事的集群位于同一个VPC中,我建议您使用AWS App Mesh。App Mesh 是一个服务网格,可让您控制和监控部署在同一 VPC 中的两个集群的服务。

\n\n

架构:\n

\n\n

先决条件

\n\n

为了成功地进行基地部署:

\n\n
    \n
  • 确保安装了最新的 AWS CLI ,即版本 1.16.268 或更高版本。
  • \n
  • 确保已 kubectl 安装,至少版本 1.11 或更高版本。
  • \n
  • 确保已 jq 安装.
  • \n
  • 确保已 aws-iam-authenticator 安装eksctl 所需的
  • \n
  • 例如,在 macOS 上使用 和 来安装 eksctl,并确保它\xe2\x80\x99s 至少在版本 上 。brew tap weaveworks/tapbrew install weaveworks/tap/eksctl0.1.26
  • \n
\n\n

请注意,本演练假设始终在该区域中运行 us-east-1

\n\n

假设两个集群都在工作并且

\n\n

KUBECONFIG 根据 输出分别更新 每个集群上的环境变量eksctl
\n在相应选项卡中运行以下命令。

\n\n
export KUBECONFIG=~/.kube/eksctl/clusters/first-cluster \n\nexport KUBECONFIG=~/.kube/eksctl/clusters/second-cluster\n
Run Code Online (Sandbox Code Playgroud)\n\n

您现在已经设置了两个集群并将 kubectl 指向各自的集群。

\n\n

现在是时候部署 App Mesh 自定义组件了

\n\n

要在创建 Pod 时自动注入 App Mesh 组件和代理,您需要在集群上创建一些自定义资源。 为此使用 头盔。在两个集群上安装tiler ,然后使用 helm 在两个集群上运行以下命令。

\n\n

下载 App Mesh 存储库

\n\n
>> git clone https://github.com/aws/aws-app-mesh-examples (https://github.com/aws/aws-app-mesh-examples).git\n>> cd aws-app-mesh-examples/walkthroughs/howto-k8s-cross-cluster\n\n
Run Code Online (Sandbox Code Playgroud)\n\n

安装头盔

\n\n
>>brew install kubernetes-helm\n
Run Code Online (Sandbox Code Playgroud)\n\n

安装舵柄

\n\n

使用helm需要在集群上安装一个名为tiller的服务器端组件。按照文档中的说明 在两个集群上安装tiler。

\n\n

验证耕耘机安装

\n\n
>>kubectl get po -n kube-system | grep -i tiller\ntiller-deploy-6d65d78679-whwzn 1/1 Running 0 5h35m\n\n
Run Code Online (Sandbox Code Playgroud)\n\n

安装 App Mesh 组件

\n\n

运行以下命令集来安装 App Mesh 控制器和注入器组件。

\n\n
helm repo add eks https://aws.github.io/eks-charts\nkubectl create ns appmesh-system\nkubectl apply -f https://raw.githubusercontent.com/aws/eks-charts/master/stable/appmesh-controller/crds/crds.yaml\nhelm upgrade -i appmesh-controller eks/appmesh-controller --namespace appmesh-system\nhelm upgrade -i appmesh-inject eks/appmesh-inject --namespace appmesh-system --set mesh.create=true --set mesh.name=global\n\n
Run Code Online (Sandbox Code Playgroud)\n\n

现在,您已准备好将示例 front 和 colorapp 应用程序与 App Mesh 一起部署到各自的集群,这将跨越两个集群。

\n\n

部署服务和网格结构

\n\n
    \n
  1. 您应该位于 walkthrough/howto-k8s-cross-cluster 文件夹中,所有命令都将从该位置运行。

  2. \n
  3. 您的帐户 ID:

  4. \n
\n\n
export AWS_ACCOUNT_ID=<your_account_id>\n
Run Code Online (Sandbox Code Playgroud)\n\n
    \n
  1. 区域,例如 us-east-1
  2. \n
\n\n
export AWS_DEFAULT_REGION=us-east-1\n
Run Code Online (Sandbox Code Playgroud)\n\n
    \n
  1. ENVOY_IMAGE 环境变量设置为 App Mesh Envoy,请参阅 Envoy
  2. \n
\n\n
export ENVOY_IMAGE=...\n
Run Code Online (Sandbox Code Playgroud)\n\n
    \n
  1. VPC_ID环境变量设置为启动 Kubernetes Pod 的 VPC。VPC 将用于使用 create-private-dns-namespace API 在 AWS 中设置
    私有 DNS 命名空间。要查找 EKS 集群的 VPC,您可以
    \n使用 aws eks describe-cluster。请参阅下文了解为什么需要 AWS Cloud Map PrivateDnsNamespace。
  2. \n
\n\n
export VPC_ID=...\n
Run Code Online (Sandbox Code Playgroud)\n\n
    \n
  1. 用于导出 kube 配置的 CLUSTER 环境变量
  2. \n
\n\n
export CLUSTER1=first-cluster\nexport CLUSTER2=second-cluster\n
Run Code Online (Sandbox Code Playgroud)\n\n

部署

\n\n
./deploy.sh\n
Run Code Online (Sandbox Code Playgroud)\n\n

最后记得验证部署。\n您可以在此处找到更多信息:app-mesh-eks

\n