在 CodeBuild 阶段运行 kubectl apply -f hello-k8s.yml 时出现“无法识别 \”hello-k8s.yml\”:未经授权”错误

2023-12-12

我是 Kubernetes 新手,正在尝试创建 AWS CodePipeline 将服务部署到 EKS 堆栈。

我正在关注this教程 我已执行所有步骤,包括创建角色和添加权限,以便代码构建将能够与 EKS 交谈。

我现在面临的问题是,当 CodePipeline 运行时,以下命令失败代码构建 phase.

kubectl apply -f hello-k8s.yml

并给出这个错误

[Container] 2019/12/04 07:41:43 Running command kubectl apply -f hello-k8s.yml 
unable to recognize "hello-k8s.yml": Unauthorized 
unable to recognize "hello-k8s.yml": Unauthorized 

我不太确定这是否是凭据问题,因为我已按照教程使用了所有步骤来添加用户/角色。

有人可以帮我解决这个问题吗?


从 CodeBuild 将 Yaml 清单部署到 Kubernetes 需要以下步骤:

高级流程包括以下步骤:

  1. 为 CodeBuild 创建 IAM 服务角色

  2. 使用“aws-auth”ConfigMap 在 EKS 中映射 CodeBuild 服务角色

  3. 在代码存储库中创建源文件

  4. 创建并启动 CodeBuild 项目

  5. 确认EKS集群中创建了所需的对象

为 CodeBuild 创建 IAM 服务角色(不要使用现有服务角色,因为它包含“/path/”)

运行以下命令创建 CodeBuild 服务角色并附加所需的策略:

TRUST = "{   \"Version\": \"2012-10-17\",   \"Statement\": [     {       \"Effect\": \"Allow\",       \"Principal\": {         \"Service\": \"codebuild.amazonaws.com\"       },       \"Action\": \"sts:AssumeRole\"     }   ] }"

$ echo '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "eks:Describe*", "Resource": "*" } ] }' > /tmp/iam-role-policy

$ aws iam create-role --role-name CodeBuildKubectlRole --assume-role-policy-document "$TRUST" --output text --query 'Role.Arn'

$ aws iam put-role-policy --role-name CodeBuildKubectlRole --policy-name eks-describe --policy-document file:///tmp/iam-role-policy

$ aws iam attach-role-policy --role-name CodeBuildKubectlRole --policy-arn arn:aws:iam::aws:policy/CloudWatchLogsFullAccess

$ aws iam attach-role-policy --role-name CodeBuildKubectlRole --policy-arn arn:aws:iam::aws:policy/AWSCodeBuildAdminAccess

使用“aws-auth”ConfigMap 在 EKS 中映射 CodeBuild 服务角色

编辑“aws-auth”ConfigMap 并添加 CodeBuild 服务角色的角色映射:

$ vi aws-auth.yaml



apiVersion: v1

kind: ConfigMap

metadata:

  name: aws-auth

  namespace: kube-system

data:

  mapRoles: |

    - rolearn:  arn:aws:iam::AccountId:role/devel-worker-nodes-NodeInstanceRole-14W1I3VCZQHU7

      username: system:node:{{EC2PrivateDNSName}}

      groups:

        - system:bootstrappers

        - system:nodes

    - rolearn: arn:aws:iam::AccountId:role/CodeBuildKubectlRole

      username: build

      groups:

        - system:masters


$ kubectl apply -f aws-auth.yaml

在代码存储库中创建源文件

在 Github/CodeCommit 中创建一个包含示例文件的存储库,如下所示:

.
├── buildspec.yml
└── deployment
   └── pod.yaml

示例存储库位于此处:https://github.com/shariqmus/codebuild-to-eks

Notes:

  • buildspec.yml 文件安装 kubectl、aws-iam-authenticator 并在 CodeBuild 环境中配置 kubectl

  • 在第 16 行使用正确的区域和 cluster_name 更新 buildspec.yml 文件

  • 在“deployment”目录中添加部署 YAML 文件

创建并启动构建项目

  1. 打开 CodeBuild 控制台

  2. 单击“创建构建项目”按钮

  3. 为项目命名

  4. 使用已添加附加文件的 CodeCommit 存储库:“buildspec.yml”和“pod.yaml”

  5. 使用托管映像 > Ubuntu > 标准 1.0

  6. 在角色名称中,选择“CodeBuildKubectlRole”

  7. 单击“创建构建项目”按钮

  8. 创建“开始构建”按钮以开始构建

确认EKS集群中创建了所需的对象

您可以使用简单的命令来确认这一点,例如

$ kubectl get all --all-namespaces
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 CodeBuild 阶段运行 kubectl apply -f hello-k8s.yml 时出现“无法识别 \”hello-k8s.yml\”:未经授权”错误 的相关文章

  • 我可以指定默认的 AWS 配置文件吗?

    在我的开发环境中 我经常在多个 AWS 访问密钥之间切换 所以在我的 aws credentials文件 我有几个配置文件 然后 我可以通过指定以下内容将这些配置文件与 aws cli 一起使用 profile
  • 我可以在私有 GCP 网络子网中启动 Google 容器引擎 (GKE) 吗?

    我正在尝试在私有 GCP 网络子网中启动 Google 容器引擎 GKE 我创建了自定义 Google Cloud VPC 然后我也在该 VPC 下创建了自定义专用网络访问子网 1 当我使用私有子网创建 GKE 集群时 我的 Kuberne
  • ECS 上蓝/绿部署所需的 Cloudformation 脚本

    我正在尝试编写一个云形成模板具有蓝绿部署支持的 AWS ECS 这项蓝绿功能最近由 AWS 在 ECS 中添加 但在云形成模板中找不到任何更新它的参考 他们提供了有关如何通过 UI 而不是通过云形成来完成此操作的文档 我猜想 AWS 可能不
  • ECS任务定义中容器之间的通信

    我在 ECS 中运行了一个任务定义awsvpc模式 包含 2 个 docker 容器 我的问题是如何在任务定义中的容器之间进行通信 它们的行为与 docker compose 类似吗 awsvpc 网络模式下的任务中的多个容器将共享任务 E
  • /getaddrinfo 处出现 SocketError:未提供节点名或服务名,或未知 padrino

    我正在尝试使用 padrino 为我的亚马逊环境构建仪表板 但是当我在控制器中尝试以下代码时 get index map gt do AWS config access key id ACCESS KEY secret access key
  • Kubernetes 上的气流:Errno 13 - 权限被拒绝:'/opt/airflow/logs/scheduler

    我在 Kubernetes 上运行 Airflow稳定舵图 https github com helm charts tree master stable airflow 我在 AWS 环境中运行它 无论是否安装任何用于日志存储的外部卷 都
  • 如何不覆盖 Helm 模板中随机生成的秘密

    我想在 Helm 模板中生成密码 这很容易使用randAlphaNum功能 但是 当版本升级时 密码将会更改 有没有办法检查密码是否先前生成 然后使用现有值 像这样的事情 apiVersion v1 kind Secret metadata
  • 如何处理自动缩放期间网络流量的突然激增

    我在 ELB 后面和 Auto Scaling 组中有两个 EC2 实例 扩大规模政策如下 CPUUtilization gt 70 持续 300 秒 添加一台服务器 当 Atoscaling 活动正在进行时 现有实例上的负载已达到 99
  • 无法在 AWS Glue PySpark 开发终端节点中正确运行脚本

    我已经配置了一个 AWS Glue 开发终端节点 并且可以在 pyspark REPL shell 中成功连接到它 像这样https docs aws amazon com glue latest dg dev endpoint tutor
  • 如何从 K8s API 获取 Kubernetes 集群名称

    如标题所述 是否可以从API中找到K8s集群名称 我查了一下 API 没有找到 kubectl config current context就可以了 它输出更多一点 比如项目名称 区域等 但它应该给你你需要的答案
  • AWS CloudWatchLog 限制

    我正在尝试找到集中式解决方案来将我的应用程序日志记录从数据库 RDS 中移出 我本想使用 CloudWatchLog 但注意到 PutLogEvents 请求有限制 PutLogEvents 请求的最大速率为每秒 5 个请求 每个日志流 即
  • 具有行为路径重定向的多个 Cloudfront 起源

    我有两个 S3 存储桶用作我的 Cloudfront 源服务器 example bucket 1 example bucket 2 两个存储桶的内容都位于这些存储桶的根中 我正在尝试将我的 Cloudfront 发行版配置为基于 URL 模
  • 使用accesskey和secretkey从S3服务器下载安全文件

    我正在尝试使用 NSURLSessionDownloadTask 从 S3 服务器下载安全文件 但它返回 403 错误 访问被拒绝 My Code NSMutableURLRequest request NSMutableURLReques
  • 亚马逊 CloudFront 延迟

    我正在为我正在开发的 Web 应用程序尝试使用 AWS S3 和 CloudFront 在应用程序中 我允许用户将文件上传到 S3 存储桶 使用 AWS SDK 并通过 CloudFront CDN 提供该文件 但问题是 即使文件已上传并在
  • 无法正确停止我的 AWS EC2 实例

    作为 AWS 新手 我有一个支持我的 Elastic Beanstalk 应用程序的 t2 micro EC2 实例 它是在我将 WAR 文件部署到 Elastic Beanstalk 时创建的 我的 EB 应用程序不需要每天 24 小时运
  • AWS EC2 自动缩放没有持续警报?

    我为自动缩放组创建了以下两个警报 Scale up如果 CPUUtilization gt 75 更改为状态 则有 1 个实例ALARM Scale down如果 CPUUtilization gt 30 更改为状态 则有 1 个实例OK
  • 如何在不验证亚马逊 ses 中收件人的情况下发送邮件

    我一直在尝试使用亚马逊 ses 发送邮件 它对所有经过验证的收件人都非常有效 但我现在需要向未经验证的收件人发送邮件 这个怎么做 谢谢 您的 SES 帐户处于沙盒模式 您需要向 AWS 提出请求 以使您的 SES 账户退出沙盒模式 这是有记
  • 支持 Kubernetes NodePort 服务的 SSL/TLS

    问题 我需要通过 https 向外部公开 Kubernetes NodePort 服务 设置 我已经在裸机上部署了 Kubernetes 并且已经部署Polyaxon https github com polyaxon polyaxon通过
  • 如何在 pod 之间或 kubernetes 集群中的节点之间复制文件?

    在 kubernetes 集群中可以这样做吗 我发现的所有示例都是从本地磁盘复制到 Pod 反之亦然 或者是从一个节点复制到另一个节点的唯一选项 例如通过 SSH SCP 或使用其他实用程序 无法进行集群到集群的复制 你需要使用kubect
  • 在 AWS Lambda 中共享代码

    在 AWS Lambda 函数之间共享代码的首选方式是什么 我有这样的结构 functions a 节点模块 index js 包 json b 节点模块 index js 包 json c 节点模块 index js 包 json 这让每

随机推荐