
如果你使用 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 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
,并启用hostNetwork: true:
yamlapiVersion: apps/v1 kind: DaemonSet metadata: name: kube2iam labels: app: kube2iam spec: selector: matchLabels: name: kube2iam template: metadata: labels: name: kube2iam spec: hostNetwork: true containers: - image: jtblin/kube2iam:latest name: kube2iam args: - "--base-role-arn=arn:aws:iam::123456789012:role/" - "--node=$(NODE_NAME)" env: - name: NODE_NAME valueFrom: fieldRef: fieldPath: spec.nodeName ports: - containerPort: 8181 hostPort: 8181 name: http
为防止容器直接访问EC2元数据API,需要将流量代理到kube2iam:
bashiptables \ --append PREROUTING \ --protocol tcp \ --destination 169.254.169.254 \ --dport 80 \ --in-interface docker0 \ --jump DNAT \ --table nat \ --to-destination `curl 169.254.169.254/latest/meta-data/local-ipv4`:8181
可以通过设置--iptables=true自动添加此规则,需要设置HOST_IP环境变量并以特权模式运行:
yamlapiVersion: apps/v1 kind: DaemonSet metadata: name: kube2iam labels: app: kube2iam spec: selector: matchLabels: name: kube2iam 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)" - "--node=$(NODE_NAME)" env: - name: HOST_IP valueFrom: fieldRef: fieldPath: status.podIP - name: NODE_NAME valueFrom: fieldRef: fieldPath: spec.nodeName ports: - containerPort: 8181 hostPort: 8181 name: http securityContext: privileged: true
注意:不同网络插件需要使用不同的接口:
cali+cbr0cni0eni+weavecni0kube-bridgetun0lxc+为Pod添加iam.amazonaws.com/role注解,指定要承担的角色:
yamlapiVersion: v1 kind: Pod metadata: name: aws-cli labels: name: aws-cli annotations: iam.amazonaws.com/role: role-arn iam.amazonaws.com/external-id: external-id spec: containers: - image: fstab/aws-cli command: - "/home/aws/aws/env/bin/aws" - "s3" - "ls" - "some-bucket" name: aws-cli
可以使用--default-role设置未指定注解时的回退角色。
在ReplicaSet、CronJob、Deployment等中使用
在更高层级的抽象资源中,需要在Pod模板中添加注解:
Deployment示例:
yamlapiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: replicas: 3 template: metadata: annotations: iam.amazonaws.com/role: role-arn labels: app: nginx spec: containers: - name: nginx image: nginx:1.9.1 ports: - containerPort: 80
CronJob示例:
yamlapiVersion: batch/v1beta1 kind: CronJob metadata: name: my-cronjob spec: schedule: "00 11 * * 2" concurrencyPolicy: Forbid startingDeadlineSeconds: 3600 jobTemplate: spec: template: metadata: annotations: iam.amazonaws.com/role: role-arn spec: restartPolicy: OnFailure containers: - name: job image: my-image
通过--namespace-restrictions标志,可以限制Pod只能承担其命名空间注解中允许的角色:
yamlapiVersion: v1 kind: Namespace metadata: annotations: iam.amazonaws.com/allowed-roles: | ["role-arn"] name: default
支持通配符匹配:
yamlapiVersion: v1 kind: Namespace metadata: annotations: iam.amazonaws.com/allowed-roles: | ["my-custom-path/*"] name: default
使用--namespace-restriction-format=regexp可启用正则表达式匹配:
yamlapiVersion: v1 kind: Namespace metadata: annotations: iam.amazonaws.com/allowed-roles: | ["my-custom-path/.*"] name: default
ServiceAccount:
yaml--- apiVersion: v1 kind: ServiceAccount metadata: name: kube2iam namespace: kube-system
ClusterRole和ClusterRoleBinding:
yaml--- apiVersion: v1 items: - apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: kube2iam rules: - apiGroups: [""] resources: ["namespaces","pods"] verbs: ["get","watch","list"] - apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: kube2iam subjects: - kind: ServiceAccount name: kube2iam namespace: kube-system roleRef: kind: ClusterRole name: kube2iam apiGroup: rbac.authorization.k8s.io kind: List
完整的DaemonSet配置:
yaml--- apiVersion: apps/v1 kind: DaemonSet metadata: name: kube2iam namespace: kube-system labels: app: kube2iam spec: selector: matchLabels: name: kube2iam template: metadata: labels: name: kube2iam spec: serviceAccountName: kube2iam hostNetwork: true containers: - image: jtblin/kube2iam:latest imagePullPolicy: Always name: kube2iam args: - "--app-port=8181" - "--base-role-arn=arn:aws:iam::xxxxxxx:role/" - "--iptables=true" - "--host-ip=$(HOST_IP)" - "--host-interface=weave" - "--verbose" env: - name: HOST_IP valueFrom: fieldRef: fieldPath: status.podIP ports: - containerPort: 8181 hostPort: 8181 name: http securityContext: privileged: true
OpenShift 3
yaml--- apiVersion: v1 kind: ServiceAccount metadata: name: kube2iam namespace: kube-system --- apiVersion: v1 items: - apiVersion: rbac.authorization.k8s.io/v1beta1 kind: ClusterRole metadata: name: kube2iam rules: - apiGroups: [""] resources: ["namespaces","pods"] verbs: ["get","watch","list"] - apiVersion: rbac.authorization.k8s.io/v1beta1 kind: ClusterRoleBinding metadata: name: kube2iam subjects: - kind: ServiceAccount name: kube2iam namespace: kube-system roleRef: kind: ClusterRole name: kube2iam apiGroup: rbac.authorization.k8s.io kind: List --- kind: SecurityContextConstraints apiVersion: v1 metadata: name: kube2iam allowPrivilegedContainer: true allowHostPorts: true allowHostNetwork: true runAsUser: type: RunAsAny seLinuxContext: type: MustRunAs users: - system:serviceacount:kube-system:kube2iam --- apiVersion: extensions/v1beta1 kind: DaemonSet metadata: name: kube2iam namespace: kube-system labels: app: kube2iam spec: selector: matchLabels: name: kube2iam template: metadata: labels: name: kube2iam spec: serviceAccountName: kube2iam hostNetwork: true nodeSelector: role: app containers: - image: docker.io/jtblin/kube2iam:latest imagePullPolicy: Always name: kube2iam args: - "--app-port=8181" - "--auto-discover-base-arn" - "--iptables=true" - "--host-ip=$(HOST_IP)" - "--host-interface=tun0" - "--verbose" env: - name: HOST_IP valueFrom: fieldRef: fieldPath: status.podIP ports: - containerPort: 8181 hostPort: 8181 name: http securityContext: privileged: true
OpenShift 4
yaml--- apiVersion: v1 kind: ServiceAccount metadata: name: kube2iam namespace: kube-system --- apiVersion: v1 items: - apiVersion: rbac.authorization.k8s.io/v1beta1 kind: ClusterRole metadata: name: kube2iam rules: - apiGroups: [""] resources: ["namespaces","pods"] verbs: ["get","watch","list"] - apiVersion: rbac.authorization.k8s.io/v1beta1 kind: ClusterRoleBinding metadata: name: kube2iam subjects: - kind: ServiceAccount name: kube2iam namespace: kube-system roleRef: kind: ClusterRole name: kube2iam apiGroup: rbac.authorization.k8s.io kind: List --- apiVersion: extensions/v1beta1 kind: DaemonSet metadata: name: kube2iam namespace: kube-system labels: app: kube2iam spec: selector: matchLabels: name: kube2iam template: metadata: labels: name: kube2iam spec: serviceAccountName: kube2iam hostNetwork: true nodeSelector: node-role.kubernetes.io/worker: '' containers: - image: docker.io/jtblin/kube2iam:latest imagePullPolicy: Always name: kube2iam args: - "--app-port=8181" - "--auto-discover-base-arn" - "--host-ip=$(HOST_IP)" - "--host-interface=tun0" - "--verbose" env: - name: HOST_IP valueFrom: fieldRef: fieldPath: status.podIP ports: - containerPort: 8181 hostPort: 8181 name: http
添加SecurityContextConstraint:
oc adm policy add-scc-to-user hostnetwork -n kube-system -z kube2iam
使用--debug标志启用调试功能,包括/debug/store端点以转储命名空间和角色关联信息。
使用--auto-discover-base-arn标志,kube2iam将通过EC2元数据服务自动发现基础ARN。
使用--auto-discover-default-role标志,kube2iam将自动发现基础ARN和附加到实例的IAM角色,并将其用作未设置注解时的回退角色。
使用--use-regional-sts-endpoint标志并设置AWS_REGION环境变量,kube2iam将使用区域STS端点,减少延迟。
kube2iam导出Prometheus指标,默认在应用服务器端口的/metrics端点。可以使用--metrics-port参数指定不同的指标端口。所有导出的指标都以kube2iam_为前缀。
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务