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

时间:2020-05-03 14:47:37

标签: kubectl aws-eks eksctl

我在EKS上创建了一个kubernetes集群。我使用eksctl create cluster创建集群。我能够胜任一切。

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

3 个答案:

答案 0 :(得分:3)

有两种获取kubeconfig的方法。

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

假设您在同一帐户上拥有EKS并且对您可见。

获得kubeconfig后,如果有访问权限,则可以开始使用kubectl。

如果您没有访问权限,则需要要求所有者将您的userID权限授予集群。

列出了完整的详细信息here

答案 1 :(得分:0)

访问仅私有API服务器

如果您已禁用集群Kubernetes API服务器端点的公共访问,则只能从VPC或connected network中访问API服务器。以下是访问Kubernetes API服务器端点的几种可能方法:

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

  • Amazon EC2堡垒主机 –您可以将Amazon EC2实例启动到群集的VPC中的公共子网中,然后通过SSH登录到该实例中以运行kubectl命令。有关更多信息,请参见Linux bastion hosts on AWS。您必须确保您的Amazon EKS控制平面安全组包含允许堡垒主机从端口443进入流量的规则。有关更多信息,请参见Amazon EKS security group considerations

    为堡垒主机配置kubectl时,请确保使用已经映射到集群的RBAC配置的AWS凭证,或者将堡垒要使用的IAM用户或角色添加到RBAC配置中,然后再进行操作删除端点的公共访问权限。有关更多信息,请参见Managing users or IAM roles for your clusterUnauthorized or access denied (kubectl)

  • AWS Cloud9 IDE – AWS Cloud9是基于云的集成开发环境(IDE),可让您仅使用浏览器即可编写,运行和调试代码。您可以在集群的VPC中创建一个AWS Cloud9 IDE,并使用IDE与集群进行通信。有关更多信息,请参见Creating an environment in AWS Cloud9。您必须确保您的Amazon EKS控制平面安全组包含允许来自IDE安全组的端口443上的入口流量的规则。有关更多信息,请参见Amazon EKS security group considerations

    在为AWS Cloud9 IDE配置kubectl时,请确保使用已经映射到集群的RBAC配置的AWS凭证,或者在添加之前将IDE使用的IAM用户或角色添加到RBAC配置中您删除端点公共访问权限。有关更多信息,请参见Managing users or IAM roles for your clusterUnauthorized or access denied (kubectl)。 在这里看看:eks-endpoints-access

通过多个群集进行隔离

一个可能的选择是使用多个单一租户Amazon EKS集群。通过这种策略,每个租户都可以在共享的AWS账户内使用自己的Kubernetes集群,或者在组织内为大型企业使用专用账户。 部署集群后,您可能需要概览所有部署的集群以监视每个租户,确保我们正在运行最新版本的EKS控制平面并大规模运行。 Rancher是一种流行的开源工具,用于管理多个Kubernetes集群,请确保查看this article on the Open Source blog以获得有关如何部署和使用它的详细信息。

同一VPC中的集群

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

架构:

先决条件

为了成功进行基础部署:

  • 确保已安装最新的AWS CLI,即1.16.268版或更高版本。
  • 请确保至少拥有kubectl版或更高版本的1.11 installed
  • 确保拥有jq installed
  • 确保具有eksctl所需的aws-iam-authenticator installed
  • 例如,在具有brew tap weaveworks/tapbrew install weaveworks/tap/eksctl的macOS上安装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自定义组件了

要在吊舱创建时自动注入App Mesh组件和代理,您需要在集群上创建一些自定义资源。为此使用 头盔 。在两个群集上均安装分till器,然后使用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

安装头盔

>>brew install kubernetes-helm

安装耕作机

使用头盔需要在群集上安装一个服务器端组件,名为tiller。请按照documentation中的说明在两个群集上安装分till。

验证分er安装

>>kubectl get po -n kube-system | grep -i tiller
tiller-deploy-6d65d78679-whwzn 1/1 Running 0 5h35m

安装App Mesh组件

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

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一起部署到各个群集。

部署服务和网格结构

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

  2. 您的帐户ID:

export AWS_ACCOUNT_ID=<your_account_id>
  1. 地区,例如us-east-1
export AWS_DEFAULT_REGION=us-east-1
  1. ENVOY_IMAGE环境变量设置为App Mesh Envoy,请参见Envoy
export ENVOY_IMAGE=...
  1. VPC_ID环境变量设置为启动Kubernetes Pod的VPC。 VPC将用于设置
    使用create-private-dns-namespace API在AWS中使用私有DNS名称空间。要了解EKS集群的VPC,您可以
    使用aws eks describe-cluster。有关为何需要AWS Cloud Map PrivateDnsNamespace的原因,请参见下文。
export VPC_ID=...
  1. CLUSTER环境变量以导出kube配置
export CLUSTER1=first-cluster
export CLUSTER2=second-cluster

部署

./deploy.sh

最后记住要验证部署。 您可以在这里找到更多信息:app-mesh-eks

答案 2 :(得分:0)

您可以获得aws IAM访问密钥和ID,这些ID和ID有权访问两个群集的群集,并设置两个aws配置文件,并使用以下命令访问群集:

aws eks update-kubeconfig --name群集名称--profile aws配置文件名称

上面的命令将在kubeconfig文件中添加访问详细信息,并设置当前上下文。 之后,您可以使用kubectl命令切换上下文:

kubectl配置使用上下文arn-nameofeks-cluster

先决条件:

  • aws-cli已安装
  • 已安装Kubectl