通过代码构建部署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```
答案 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命令。