我在 EKS 上创建了一个 Kubernetes 集群。我使用 eksctl create cluster 来创建集群。我能够访问所有很棒的东西。
但是,我的同事创建了另一个集群,我想知道如何生成/获取 Kubeconfigs,以便我可以指向我的同事创建的集群。
我在 EKS 上创建了一个 Kubernetes 集群。我使用 eksctl create cluster 来创建集群。我能够访问所有很棒的东西。
但是,我的同事创建了另一个集群,我想知道如何生成/获取 Kubeconfigs,以便我可以指向我的同事创建的集群。
有两种方法可以获得 kubeconfig。
aws eks update-kubeconfig --name <clustername> --region <region>
eksctl utils write-kubeconfig --cluster=<clustername>
前提是您在同一帐户上拥有 EKS 并且对您可见。
获得 kubeconfig 后,如果您有访问权限,则可以开始使用 kubectl。
如果您没有访问权限,则需要要求所有者授予您的 userID 对集群的权限。
此处列出了完整的详细信息
如果您已禁用集群的 Kubernetes API 服务器终端节点的公共访问权限,则只能从您的 VPC 或 连接的网络中访问 API 服务器。以下是访问 Kubernetes API 服务器端点的几种可能方式:
连接网络– 使用AWS 中转网关 或其他 连接选项 将您的网络连接到 VPC, 然后使用连接网络中的计算机。您必须确保您的 Amazon EKS 控制平面安全组包含允许来自连接网络的端口 443 上的入口流量的规则。
Amazon EC2 堡垒主机 – 您可以将 Amazon EC2 实例启动到集群 VPC 中的公有子网中,然后通过 SSH 登录到该实例以运行 kubectl
命令。有关更多信息,请参阅 AWS 上的 Linux 堡垒主机。您必须确保您的 Amazon EKS 控制平面安全组包含允许来自堡垒主机的端口 443 上的入口流量的规则。有关更多信息,请参阅 Amazon EKS 安全组注意事项。
当您 kubectl
为堡垒主机进行配置时,请务必使用已映射到集群的 RBAC 配置的 AWS 凭证,或者在删除终端节点公共访问之前将您的堡垒将使用的 IAM 用户或角色添加到 RBAC 配置中。有关更多信息,请参阅 管理集群的用户或 IAM 角色 和 未经授权或拒绝访问 (kubectl)。
AWS Cloud9 IDE – AWS Cloud9 是一个基于云的集成开发环境 (IDE),您只需使用浏览器即可编写、运行和调试代码。您可以在集群的 VPC 中创建 AWS Cloud9 IDE,并使用 IDE 与您的集群进行通信。有关更多信息,请参阅 在 AWS Cloud9 中创建环境。您必须确保您的 Amazon EKS 控制层面安全组包含允许来自 IDE 安全组的端口 443 上的入口流量的规则。有关更多信息,请参阅 Amazon EKS 安全组注意事项。
当您 kubectl
为 AWS Cloud9 IDE 进行配置时,请务必使用已映射到集群的 RBAC 配置的 AWS 凭证,或者在删除终端节点公共访问之前将您的 IDE 将使用的 IAM 用户或角色添加到 RBAC 配置中。有关更多信息,请参阅 管理集群的用户或 IAM 角色 和 未经授权或拒绝访问 (kubectl)。看看这里:eks-endpoints-access。
一种可能的替代方法是使用多个单租户 Amazon EKS 集群。通过这种策略,每个租户都可以在共享的 AWS 账户中使用自己的 Kubernetes 集群,或者在大型企业的组织中使用专用账户。部署集群后,您可能希望了解所有已部署集群的概览以监控每个租户,确保我们正在运行最新版本的 EKS 控制平面并大规模运行。Rancher 是一种流行的开源工具,用于管理多个 Kubernetes 集群,请务必查看 开源博客上的这篇文章, 了解如何部署和使用它的详细信息。
如果您同事的集群在同一个VPC中,我建议您使用AWS App Mesh。App Mesh 是一种服务网格,可让您控制和监控跨部署在同一 VPC 中的两个集群的服务。
建筑学:
为了成功进行基础部署:
kubectl
安装,至少版本 1.11
或更高版本。jq
安装.aws-iam-authenticator
安装eksctl 所需brew tap weaveworks/tap
brew install weaveworks/tap/eksctl
0.1.26
请注意,本演练假设始终在该 us-east-1
区域中运行。
假设两个集群都在工作并且
KUBECONFIG
根据 eksctl
输出分别更新每个集群上的 环境变量:
在各自的选项卡中运行以下命令。
export KUBECONFIG=~/.kube/eksctl/clusters/first-cluster
export KUBECONFIG=~/.kube/eksctl/clusters/second-cluster
您现在已经设置了两个集群并将 kubectl 指向各自的集群。
现在是部署 App Mesh 自定义组件的时候了
要在创建 pod 时自动注入 App Mesh 组件和代理,您需要在集群上创建一些自定义资源。为此使用 helm 。在两个集群上安装 tiller ,然后使用 helm 在两个集群上运行以下命令。
下载 App Mesh 存储库
>> git clone https://github.com/aws/aws-app-mesh-examples (https://github.com/aws/aws-app-mesh-examples).git
>> cd aws-app-mesh-examples/walkthroughs/howto-k8s-cross-cluster
安装 Helm
>>brew install kubernetes-helm
安装分蘖
使用 helm 需要在集群上安装一个名为 tiller 的服务器端组件。按照 文档中的说明在 两个集群上安装分蘖。
验证分蘖安装
>>kubectl get po -n kube-system | grep -i tiller
tiller-deploy-6d65d78679-whwzn 1/1 Running 0 5h35m
安装 App Mesh 组件
运行以下命令集以安装 App Mesh 控制器和注入器组件。
helm repo add eks https://aws.github.io/eks-charts
kubectl create ns appmesh-system
kubectl apply -f https://raw.githubusercontent.com/aws/eks-charts/master/stable/appmesh-controller/crds/crds.yaml
helm upgrade -i appmesh-controller eks/appmesh-controller --namespace appmesh-system
helm upgrade -i appmesh-inject eks/appmesh-inject --namespace appmesh-system --set mesh.create=true --set mesh.name=global
您现在已准备好将示例前端应用程序和 colorapp 应用程序连同将跨越两个集群的 App Mesh 部署到各自的集群。
您应该在 walkthrough/howto-k8s-cross-cluster 文件夹中,所有命令都将从该位置运行。
您的帐户 ID:
export AWS_ACCOUNT_ID=<your_account_id>
export AWS_DEFAULT_REGION=us-east-1
export ENVOY_IMAGE=...
VPC_ID
环境变量设置为启动 Kubernetes pod 的 VPC。aws eks describe-cluster
. 请参阅下文了解需要 AWS Cloud Map PrivateDnsNamespace 的原因。export VPC_ID=...
export CLUSTER1=first-cluster
export CLUSTER2=second-cluster
部署
./deploy.sh
最后记得验证部署。您可以在此处找到更多信息:app-mesh-eks。
您可以获得有权访问集群的 aws IAM 访问密钥和 id,并设置两个 aws 配置文件并使用以下命令访问集群:
aws eks update-kubeconfig --name 集群名称 --profile aws-profilename
上面的命令将在 kubeconfig 文件中添加访问详细信息并设置当前上下文。之后,您可以使用 kubectl 命令切换上下文:
kubectl 配置使用上下文 arn-nameofeks-cluster
先决条件: