【问题标题】:How to connect AWS EKS cluster from Azure Devops pipeline - No user credentials found for cluster in KubeConfig content如何从 Azure Devops 管道连接 AWS EKS 集群 - 在 KubeConfig 内容中找不到集群的用户凭据
【发布时间】:2020-07-19 02:03:07
【问题描述】:

我必须在 Microsoft Azure Devops 中设置 CI 来部署和管理 AWS EKS 集群资源。第一步,发现很少的 kubernetes 任务可以连接到 kubernetes 集群(在我的情况下,它是 AWS EKS),但是在 Azure devops 中的任务“kubectlapply”任务中,我只能将 kube 配置文件或 Azure 订阅传递给到达集群。

就我而言,我有 kube 配置文件,但我还需要传递有权访问 AWS EKS 集群的 AWS 用户凭证。但是在添加新的“k8s 端点”以提供可用于访问 EKS 集群的 AWS 凭证时,任务中没有此类选项。因此,我在验证与 EKS 集群的连接时看到以下错误。

在运行时,我可以通过管道中的环境变量传递 AWS 凭证,但无法在任务中添加 kubeconfig 文件并保存它。

Azure 和 AWS 是云计算领域的重要参与者,应该有办法连接来自任何 CI 平台的 AWS 资源。有没有人遇到过这种问题?首先连接到 AWS 和 EKS 集群以在 Azure Devops CI 中进行部署的最佳方法是什么。

在 KubeConfig 内容中找不到集群的用户凭据。确保凭据存在,然后重试。

【问题讨论】:

    标签: amazon-web-services azure-devops amazon-eks azure-devops-server-2019


    【解决方案1】:

    Amazon EKS 使用 IAM 通过 AWS IAM Authenticator for Kubernetes 为您的 Kubernetes 集群提供身份验证。您可以参考以下格式更新您的配置文件:

    apiVersion: v1
    clusters:
    - cluster:
        server: ${server}
        certificate-authority-data: ${cert}
      name: kubernetes
    contexts:
    - context:
        cluster: kubernetes
        user: aws
      name: aws
    current-context: aws
    kind: Config
    preferences: {}
    users:
    - name: aws
      user:
        exec:
          apiVersion: client.authentication.k8s.io/v1alpha1
          command: aws-iam-authenticator
          env:
          - name: "AWS_PROFILE"
            value: "dev"
          args:
            - "token"
            - "-i"
            - "mycluster"
    

    有用的链接:

    【讨论】:

    • kube 配置具有您所说的 aws-iam-authenticator,并且可以使用 aws 用户访问 eks,但在 Azure 任务中没有可用于输入可使用的 aws 密钥和秘密的选项访问k8s集群。这就是我的问题。
    • 您可以尝试捕获提琴手踪迹吗?
    • 不,我什至达不到这一点。在配置任务和保存管道并运行之前,我看到了这个错误。
    • 在创建服务连接时捕获 fiddler 跟踪并进行验证。
    • Dong - 在创建服务连接时,我没有启用任何调试的选项。启用任何跟踪选项将来自命令行。我遇到的问题是使用 kube 配置文件测试与 k8s 集群的连接。在 linux 代理上,尝试使用详细程度启用 kubectl 调试/跟踪,但无法使其正常工作。你知道如何在 kubectl 中启用跟踪,"kubectl config view --kubeconfig=$HOME/kubeconfig/deployer/config --v=4"
    【解决方案2】:

    我通过以下帖子使用 ServiceAccount 获得了解决方案:How to deploy to AWS Kubernetes from Azure DevOps

    【讨论】:

      【解决方案3】:

      对于仍然遇到此问题的任何人,我必须为我工作的初创公司进行设置,这非常简单。

      创建集群后,创建服务帐号

      $ kubectl apply -f - <<EOF
      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: build-robot
      EOF
      

      然后应用集群角色绑定

      $ kubectl apply -f - <<EOF
      apiVersion: rbac.authorization.k8s.io/v1
      kind: ClusterRoleBinding
      metadata:
        labels:
          app.kubernetes.io/name: build-robot
        name: build-robot
      roleRef:
        apiGroup: rbac.authorization.k8s.io
        kind: ClusterRole
        name: admin
      subjects:
        - kind: ServiceAccount
          name: build-robot
          namespace: default
      EOF
      

      请注意上述内容,因为它提供了完全访问权限,请查看 (https://kubernetes.io/docs/reference/access-authn-authz/rbac/) 了解更多信息以了解访问权限范围。

      从那里前往 ADO 并按照步骤使用 deploy-robot 作为 SA 名称

      $ kubectl get serviceAccounts build-robot -n default -o='jsonpath={.secrets[*].name}'
      xyz........
      
      $ kubectl get secret xyz........ -n default -o json
      ...
      ...
      ...
      

      将 kubernetes 资源添加到环境中时将输出粘贴到最后一个框中,然后选择Accept UnTrusted Certificates。然后单击应用并验证,您应该一切顺利。

      【讨论】:

        猜你喜欢
        • 2021-11-17
        • 1970-01-01
        • 1970-01-01
        • 2020-06-18
        • 2021-03-05
        • 2019-12-30
        • 2022-01-27
        • 1970-01-01
        • 2020-01-12
        相关资源
        最近更新 更多