
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
kube2iam基于注解为运行在Kubernetes集群中的容器提供IAM凭证,解决多租户容器环境下的AWS资源访问权限隔离问题。
在传统AWS环境中,服务级别的隔离通过IAM角色实现。IAM角色通过实例配置文件分配,aws-sdk会透明地调用EC2元数据API获取临时凭证,进而访问AWS服务。
在多租户容器环境中,多个容器会共享底层节点。若通过IAM角色提供AWS资源访问权限,需创建包含所有必要权限的合并IAM角色,这从安全角度不可接受。
将容器发往EC2元数据API的流量重定向到每个节点上运行的专用容器,该容器调用AWS API获取临时凭证并返回给调用者,其他请求则代理到EC2元数据API。此容器需启用主机网络以直接访问EC2元数据API。
需创建可承担其他角色的IAM角色并分配给每个Kubernetes工作节点:
json{ "Version": "2012-10-17", "Statement": [ { "Action": [ "sts:AssumeRole" ], "Effect": "Allow", "Resource": "*" } ] }
被承担的角色必须配置信任关系,允许Kubernetes工作节点角色承担。详情参见StackOverflow帖子:
json{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com" }, "Action": "sts:AssumeRole" }, { "Sid": "", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:role/kubernetes-worker-role" }, "Action": "sts:AssumeRole" } ] }
以守护进程集方式运行kube2iam容器(确保每个工作节点运行一个实例),并启用hostNetwork: true:
yaml--- apiVersion: extensions/v1beta1 kind: DaemonSet metadata: name: kube2iam labels: app: kube2iam spec: template: metadata: labels: name: kube2iam spec: hostNetwork: true containers: - image: jtblin/kube2iam:latest name: kube2iam args: - "--base-role-arn=arn:aws:iam::123456789012:role/" ports: - containerPort: 8181 hostPort: 8181 name: http
为防止容器直接访问EC2元数据API获取未授权AWS资源访问权限,需将发往169.254.169.254的流量代理到docker容器:
bashiptables -t nat -A PREROUTING -p tcp -d 169.254.169.254 --dport 80 -j DNAT --to-destination `curl 169.254.169.254/latest/meta-data/local-ipv4`:8181 -i docker0
通过设置--iptables=true、HOST_IP环境变量并以特权安全上下文运行容器,可自动添加上述规则:
yaml--- apiVersion: extensions/v1beta1 kind: DaemonSet metadata: name: kube2iam labels: app: kube2iam spec: template: metadata: labels: name: kube2iam spec: hostNetwork: true containers: - image: jtblin/kube2iam:latest name: kube2iam args: - "--base-role-arn=arn:aws:iam::123456789012:role/" - "--iptables=true" - "--host-ip=$(HOST_IP)" env: - name: HOST_IP valueFrom: fieldRef: fieldPath: status.podIP ports: - containerPort: 8181 hostPort: 8181 name: http securityContext: privileged: true
为Pod添加iam.amazonaws.com/role注解,指定该Pod需承担的角色:
yaml--- apiVersion: v1 kind: Pod metadata: name: aws-cli labels: name: aws-cli annotations: iam.amazonaws.com/role: role-name spec: containers: - image: fstab/aws-cli command: - "/home/aws/aws/env/bin/aws" - "s3" - "ls" - "some-bucket" name: aws-cli
可通过--default-role设置未指定注解时的回退角色。
默认情况下,kube2iam使用集群内方法连接Kubernetes主节点,并通过iam.amazonaws.com/role注解获取容器角色。可设置base-role-arn选项为所有角色应用基础ARN,此时注解只需传入角色名称;否则需在注解中传入完整角色ARN。
bash$ kube2iam --help Usage of kube2iam: --api-server string Kubernetes API服务器端点 --api-token string 用于API服务器认证的令牌 --app-port string HTTP端口(默认"8181") --base-role-arn string 基础角色ARN --default-role string 未设置注解时使用的回退角色 --host-interface string 用于代理AWS元数据的主机接口(默认"docker0") --host-ip string 主机IP地址 --iam-role-key string 用于获取IAM角色的Pod注解键(默认"iam.amazonaws.com/role") --insecure 不验证TLS证书访问Kubernetes服务器(仅测试用) --iptables 添加iptables规则(需同时设置--host-ip) --metadata-addr string EC2元数据地址(默认"169.254.169.254") --verbose 详细输出模式 --version 打印版本并退出
Jerome Touffe-Blin,@jtblin,关于我
kube2iam版权所有2016 Jerome Touffe-Blin及贡献者。采用BSD许可证,详见包含的LICENSE文件。
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务