Kubectl代码管道

时间:2019-08-04 12:23:47

标签: jenkins-pipeline kubectl aws-codepipeline aws-codebuild amazon-eks

通过代码构建部署kubectl时,出现“响应状态:401未经授权” 错误。有人可以帮忙吗?

记录摘要:

I0804 12:13:45.711701 43 round_trippers.go:383] GET https://54E5332D7DAA77A8A685714EE1677CF8.sk1.eu-west-1.eks.amazonaws.com/openapi/v2?timeout=32s I0804 12:13:45.711716 43 round_trippers.go:390]请求标头: I0804 12:13:45.711723 43 round_trippers.go:393]接受:application/com.github.proto-openapi.spec.v2@v1.0+protobuf I0804 12:13:45.711729 43 round_trippers.go:393]用户代理:kubectl / v1.12.3(linux / amd64)kubernetes / 435f92c I0804 12:13:46.409919 43 round_trippers.go:408] Re 响应状态:未授权(在698毫秒内)

代码构建

    Type: AWS::CodeBuild::Project
    DependsOn:
      - CodeBuildPolicy
    Properties:
      Artifacts:
        Type: CODEPIPELINE
      Environment:
        ComputeType: BUILD_GENERAL1_SMALL
        Image: !Ref KubernetesDockerImage
        Type: LINUX_CONTAINER
        EnvironmentVariables:
          - Name: REPOSITORY_URI
            Value: !Sub ${AWS::AccountId}.dkr.ecr.${AWS::Region}.amazonaws.com/${EcrDockerRepository}
          - Name: EKS_CLUSTER_NAME
            Value: !Ref ClusterName
          - Name: EKS_KUBECTL_ROLE_ARN
            Value: !Sub arn:aws:iam::${AWS::AccountId}:role/<kubectl role>
      LogsConfig:
        CloudWatchLogs:
          GroupName: /aws/codebuild/aaa-test-pipeline
          Status: ENABLED
      Name: !Sub ${AWS::StackName}-InvokeKubernetesApply
      ServiceRole: !Sub 'arn:aws:iam::${AWS::AccountId}:role/<build>-cicd-CodeBuild'
      Source:
        Type: CODEPIPELINE
        BuildSpec: !Sub |
          version: 0.1
          phases:
            install:
              commands:
                - aws eks update-kubeconfig --name ${ClusterName} --region eu-west-1
            build:
              commands:
                - kubectl apply -f .
      VpcConfig:
        VpcId: !Ref VpcId
        Subnets:
          - !Ref PrivateSubnet1Id
          - !Ref PrivateSubnet2Id
          - !Ref PrivateSubnet3Id```

1 个答案:

答案 0 :(得分:1)

答案是,您需要使用与创建集群相同的IAM实体来配置环境。我发现的简单解决方案是在代码构建环境变量中使用来自管理员用户的AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY值。我确信一个更好的长期解决方案是使用与您在其下运行构建相同的角色来重新创建集群,但是我还没有确定这一点。

从AWS Docs:https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html

  

创建Amazon EKS集群后,IAM实体(用户或角色)   创建集群的集群已添加到Kubernetes RBAC授权中   表以管理员身份(具有system:master权限。最初,   只有该IAM用户可以使用以下命令调用Kubernetes API服务器   kubectl。有关更多信息,请参阅管理用户或IAM角色。   您的集群。此外,适用于Kubernetes的AWS IAM Authenticator使用   适用于Go的AWS开发工具包可针对您的Amazon EKS集群进行身份验证。如果你   使用控制台创建集群时,必须确保相同   当您执行以下操作时,IAM用户凭证位于AWS开发工具包凭证凭证链中   在集群上运行kubectl命令。