
【免费下载链接】charts⚠️(OBSOLETE) Curated applications for Kubernetes项目地址https://gitcode.com/gh_mirrors/chart/charts点击查看免费下载本指南以 stable/kiam 的官方 README 为核心结合 charts 仓库中 kiam chart 的模板源码与默认配置系统讲解如何在 Kubernetes 集群中通过 Helm 部署 kiamAWS IAM 与 Kubernetes 的集成组件涵盖快速安装、TLS 证书三种注入方式、Agent/Server 双组件架构、全部可配置参数及部署后的验证方法。读者学完后可以独立完成 kiam 的安装、证书配置、参数调优与故障排查。kiam 是什么将 AWS IAM 引入 KuberneteskiamKubernetes IAM是一个运行在 Kubernetes 集群内的代理组件用于把 AWS IAM 的角色授权能力无缝地注入到集群的 Pod 中。它通过在每台节点上运行的 Agent 拦截 Pod 对 AWS 元数据服务169.254.169.254的访问请求并由集群内的 Server 组件根据 Pod 上的iam.amazonaws.com/role注解向 STS 换取临时凭证从而让 Pod 无需在镜像内硬编码任何 AWS 密钥即可安全访问 AWS 资源。本仓库中的stable/kiamchart当前版本 Chart.yaml 中记录为version: 2.5.3、appVersion: 3.3正是用于将 kiam 以 Helm 方式一键部署到集群中的官方封装。它同时创建 Agent 与 Server 两套 DaemonSet并自动生成或挂载 TLS 证书、Service、RBAC 等全套资源。重要本 chart 的废弃说明在深入使用之前必须了解根据 README 的 Deprecation Notice 以及 Chart.yaml 中deprecated: true的标记这个stable/kiamchart 已正式废弃所有后续更新都转移到了由 uSwitch 官方维护的 Helm chart位于 uswitch/kiam 项目仓库的helm/kiam目录以及 Helm Hub 上的uswitch/kiamchart。这意味着新问题与 Pull Request 应提交到 uSwitch 官方仓库对于已在使用该 chart 的存量环境本指南中的安装与配置方法仍然有效新项目建议直接改用 uSwitch 官方维护的 chart 版本以获得持续更新的支持。架构速览Agent 与 Server 双组件从模板结构可以清晰看到 kiam 的部署形态——本 chart 在 templates 目录中为每个组件都准备了独立的资源模板Agent每节点代理由 agent-daemonset.yaml 定义为 DaemonSet运行在集群的每一台节点上监听--host-interface默认cali上的元数据代理流量。Agent 本身以hostNetwork: true方式运行通过 iptables 或接口监听将 Pod 对 AWS 元数据服务的请求转发给 Server。Server凭证签发中心由 server-daemonset.yaml 定义为 DaemonSet默认负责读取集群中 Pod 与 Namespace 的注解server-read-clusterrole.yaml 授予对namespaces、pods的watch/get/list权限向 AWS STS 申请临时凭证并通过 gRPC 把凭证下发给 Agent。Server 通过 Service见 server-service.yaml暴露grpclb端口默认 443Agent 在启动参数中用--server-address指向release-name-server:443与之通信。这一本地代理 集中签发的架构使得业务 Pod 完全无感地获得按角色隔离的 AWS 临时凭证。前置条件在安装前需要确认集群满足以下要求来自 READMEKubernetes 1.8且已启用 Beta API本 chart 的 DaemonSet 使用apps/v1beta2API模板见 agent-daemonset.yaml 与 server-daemonset.yaml集群工作节点需要能够访问 AWS 元数据服务与 STS 服务若启用 RBAC默认开启需要集群支持 RBAC 授权。快速安装一条命令启动最简安装方式即 README 中的 TL;DR$ helm install stable/kiam如需指定 release 名称则使用$ helm install stable/kiam --name my-release该命令会以默认配置把 kiam 部署到集群。默认配置下Agent 与 Server 都会安装agent.enabled/server.enabled均为true镜像使用quay.io/uswitch/kiam:v3.3并自动生成自签名的 TLS 证书用于 Agent 与 Server 之间的安全通信。安装后验证安装完成后NOTES.txt 会提示用以下命令确认 kiam 已启动$ kubectl --namespacenamespace get pods -l appkiam,releaserelease-name其中namespace与release-name需替换为实际部署的命名空间与 release 名称。TLS 证书配置三种方式任选Agent 与 Server 之间的 gRPC 通信使用 mTLS因此证书配置是部署的核心环节。README 提供了三种注入方式本 chart 在模板中对应实现了全部逻辑。方式一默认自动生成自签名证书开箱即用如果未做任何证书配置agent-secret.yaml 与 server-secret.yaml 会在安装时自动创建包含 CA、证书与私钥的 Secret。证书生成逻辑位于 _helpers.tplAgent 证书通过genCA kiam-ca 365genSignedCert生成Server 证书的 SANSubject Alternative Name会包含release-name-server、release-name-server:port以及127.0.0.1:targetPort三个地址确保 Agent 通过 Service DNS 连接 Server 时证书校验通过。方式二使用自定义证书tlsFilesREADME 提示如果希望自己签发并管理证书可以将 PEM 文件的 base64 编码内容用base64命令生成填入tlsFiles配置agent: tlsFiles: key: LS0tL... cert: LS0tL... ca: LS0tL... server: tlsFiles: key: LS0tL... cert: LS0tL... ca: LS0tL...模板中的判断逻辑为当tlsFiles.ca有值时直接把tlsFiles渲染进 Secret 的data字段否则才走自动生成逻辑见 agent-secret.yaml。仓库的 CI 冒烟测试 test-values.yaml 中即提供了完整的 base64 PEM 示例可作为配置格式参考。重要提示来自 READMEhosts字段即证书的 SAN必须包含_release-name_-server:_server-service-port这个地址例如my-release-server:443。如果证书中没有包含 Agent 实际用来连接 Server 的主机名Agent 日志中会出现如下告警实质是错误并且 Pod 将无法获得凭证{level:warning,msg:error finding role for pod: rpc error: code Unavailable desc there is no connection available,pod.ip:100.120.0.2,time:2018-05-24T04:11:25Z}方式三复用已存在的 SecrettlsSecret如果 TLS 证书 Secret 已经在集群中创建好可以直接指定 Secret 名称而无需再提供证书内容agent: tlsSecret: kiam-agent-tls server: tlsSecret: kiam-server-tls此时模板中的条件not .Values.agent.tlsSecret/not .Values.server.tlsSecret为假Secret 不会被 chart 创建见 agent-secret.yaml而 DaemonSet 会改用该 Secret 作为 TLS 卷挂载来源见 agent-daemonset.yaml。证书文件名映射tlsCerts无论采用哪种方式Agent/Server 进程内约定的证书文件名都可以通过tlsCerts配置agent: tlsCerts: certFileName: cert keyFileName: key caFileName: ca server: tlsCerts: certFileName: cert keyFileName: key caFileName: ca这些文件名会被拼接到--cert/etc/kiam/tls/...、--key/etc/kiam/tls/...、--ca/etc/kiam/tls/...启动参数中见 agent-daemonset.yaml默认挂载路径为/etc/kiam/tls。完整配置参数详解以下参数表完整取自 README并与 values.yaml 的默认值一一对应可在安装时按需覆盖参数说明默认值agent.enabled若为 true 则创建 Agenttrueagent.nameAgent 容器名称agentagent.image.repositoryAgent 镜像quay.io/uswitch/kiamagent.image.tagAgent 镜像标签v3.3agent.image.pullPolicyAgent 镜像拉取策略IfNotPresentagent.dnsPolicyAgent Pod DNS 策略ClusterFirstWithHostNetagent.whiteListRouteRegexpAgent 白名单元数据 API 路径正则参数{}agent.extraArgs额外的 Agent 容器参数{}agent.extraEnv额外的 Agent 容器环境变量{}agent.extraHostPathMounts额外的 Agent 容器 hostPath 挂载[]agent.gatewayTimeoutCreationAgent 创建 kiam 网关的超时时间50msagent.host.ip宿主机 IP 地址$(HOST_IP)agent.host.iptables是否添加 iptables 规则falseagent.host.interfaceAgent 代理 AWS 元数据所用的宿主接口caliagent.host.portAgent 监听端口8181agent.log.jsonOutputAgent 日志是否以 JSON 格式输出trueagent.log.levelAgent 日志级别debug、info、warn或errorinfoagent.nodeSelectorAgent Pod 调度的节点标签{}agent.prometheus.portAgent Prometheus 指标端口9620agent.prometheus.scrape是否抓取 Agent 的 Prometheus 指标trueagent.prometheus.syncIntervalAgent Prometheus 同步间隔5sagent.podAnnotations添加到 Agent Pod 的注解{}agent.podLabels添加到 Agent Pod 的标签{}agent.priorityClassNameAgent Pod 的优先级类名agent.resourcesAgent 容器资源{}agent.serviceAnnotations添加到 Agent Service 的注解{}agent.serviceLabels添加到 Agent Service 的标签{}agent.tlsSecretAgent TLS 证书 Secret 名称nullagent.tlsFiles.caAgent CA 证书的 base64 编码字符串nullagent.tlsFiles.certAgent 证书的 base64 编码字符串nullagent.tlsFiles.keyAgent 私钥的 base64 编码字符串nullagent.tolerations应用于 Agent Pod 的容忍度[]agent.affinityPod 调度的节点亲和性{}agent.updateStrategyAgent DaemonSet 更新策略需要 Kubernetes 1.6OnDeleteserver.enabled若为 true 则创建 Servertrueserver.nameServer 容器名称serverserver.gatewayTimeoutCreationServer 创建 kiam 网关的超时时间50msserver.image.repositoryServer 镜像quay.io/uswitch/kiamserver.image.tagServer 镜像标签v3.3server.image.pullPolicyServer 镜像拉取策略Alwaysserver.assumeRoleArnServer 处理请求前要承担的 IAM 角色nullserver.cache.syncIntervalPod 缓存同步间隔1mserver.extraArgs额外的 Server 容器参数{}server.extraEnv额外的 Server 容器环境变量{}server.extraHostPathMounts额外的 Server 容器 hostPath 挂载[]server.log.jsonOutputServer 日志是否以 JSON 格式输出trueserver.log.levelServer 日志级别debug、info、warn或errorinfoserver.nodeSelectorServer Pod 调度的节点标签{}server.prometheus.portServer Prometheus 指标端口9620server.prometheus.scrape是否抓取 Server 的 Prometheus 指标trueserver.prometheus.syncIntervalServer Prometheus 同步间隔5sserver.podAnnotations添加到 Server Pod 的注解{}server.podLabels添加到 Server Pod 的标签{}server.probes.serverAddress就绪与存活探针访问的地址127.0.0.1server.priorityClassNameServer Pod 的优先级类名server.resourcesServer 容器资源{}server.roleBaseArnIAM 角色的基础 ARN未指定时通过 EC2 元数据服务自动检测 ARN 前缀nullserver.sessionDurationServer 生成的 STS 令牌会话时长15mserver.serviceAnnotations添加到 Server Service 的注解{}server.serviceLabels添加到 Server Service 的标签{}server.service.portServer Service 端口443server.service.targetPortServer Service 目标端口443server.tlsSecretServer TLS 证书 Secret 名称nullserver.tlsFiles.caServer CA 证书的 base64 编码字符串nullserver.tlsFiles.certServer 证书的 base64 编码字符串nullserver.tlsFiles.keyServer 私钥的 base64 编码字符串nullserver.tolerations应用于 Server Pod 的容忍度[]server.affinityPod 调度的节点亲和性{}server.updateStrategyServer DaemonSet 更新策略需要 Kubernetes 1.6OnDeleteserver.useHostNetwork若为 trueServer 使用 hostNetwork 以绕过 Agent 的 iptables 规则falserbac.create若为true创建并使用 RBAC 资源truepsp.create若为true为启用的 Agent 和 Server 创建 Pod 安全策略falseserviceAccounts.agent.create若为 true创建 Agent 的 ServiceAccounttrueserviceAccounts.agent.name使用的或创建的 Agent ServiceAccount 名称{{ kiam.agent.fullname }}serviceAccounts.server.create若为 true创建 Server 的 ServiceAccounttrueserviceAccounts.server.name使用的或创建的 Server ServiceAccount 名称{{ kiam.server.fullname }}几个关键参数背后的源码行为server.roleBaseArn设置后模板会追加--role-base-arn值参数留空默认null时则追加--role-base-arn-autodetect由 Server 启动时通过 EC2 元数据服务自动探测 ARN 前缀见 server-daemonset.yaml。server.sessionDuration直接映射为--session-duration参数默认15m控制 Server 向 STS 申请的临时凭证有效期。agent.host.iptables置为true时Agent 容器会获得NET_ADMINcapability并追加--iptables参数见 agent-daemonset.yaml同时 agent-daemonset.yaml 会挂载/run/xtables.lockhostPath用于并发修改 iptables 时的锁协调。agent.host.interface默认caliCalico 网络接口前缀映射为--host-interface参数决定 Agent 在哪些接口上代理元数据流量若使用 Flannel 等 CNI需要按需调整。server.useHostNetwork默认falsevalues.yaml 注释说明当 Server 与 Agent 运行在同一批节点上时可以置为true使用 hostNetwork 绕过 Agent 的 iptables 规则。server.probes.serverAddress默认127.0.0.1Server 的存活/就绪探针通过exec执行/kiam health命令并携带--server-address、--server-address-refresh2s、--timeout5s与--gateway-timeout-creation参数见 server-daemonset.yamlAgent 的存活探针则使用 HTTPGET /ping探测自身监听端口agent-daemonset.yaml。Prometheus 指标当prometheus.scrape为true时Agent/Server 各自生成的 Service 会自动加上prometheus.io/scrape: true与prometheus.io/port注解见 agent-service.yaml 与 server-service.yaml可直接被 Prometheus 自动发现并抓取。安装时的参数指定方式方式一--set 命令行覆盖每个参数都可以通过helm install的--set keyvalue[,keyvalue]参数指定。README 给出的示例$ helm install stable/kiam --name my-release \ --setextraArgs.base-role-arnarn:aws:iam::0123456789:role/,extraArgs.default-rolekube2iam-default,host.iptablestrue,host.interfacecbr0说明上述示例中extraArgs.*与host.*实际会分别映射到 Server 与 Agent 的启动参数。更严谨的写法是把 Agent 相关参数放在agent.前缀下例如--setagent.host.iptablestrue,agent.host.interfacecbr0。方式二-f 指定 values 文件也可以把参数整理成 YAML 文件后在安装时传入$ helm install stable/kiam --name my-release -f values.yaml完整的默认值文件可在本仓库的 values.yaml 中查看其中包含每个参数的注释说明例如agent.extraHostPathMounts还给出了在 Amazon Linux / RHEL/etc/pki/ca-trust/extracted/pem与其他发行版/usr/share/ca-certificates挂载 CA 证书目录的示例。部署后的使用与验证kiam 通过注解annotation声明 Pod 要使用的 IAM 角色完整使用流程记录在 NOTES.txt 中Step 1给命名空间添加允许角色注解在需要启用 kiam 的命名空间上添加iam.amazonaws.com/permitted注解值为允许的角色 ARN 或匹配角色 ARN 的正则表达式kind: Namespace metadata: name: iam-example annotations: iam.amazonaws.com/permitted: Role ARN or a Regex matching role ARN(s)Step 2给 Pod 添加角色注解在 Pod 上添加iam.amazonaws.com/role注解声明该 Pod 要承担的 IAM 角色。kiam 的 Server 会读取命名空间与 Pod 的注解对应 server-read-clusterrole.yaml 授予的 RBAC 权限校验后向 STS 申请临时凭证并通过 Agent 注入。Step 3在 Pod 内验证凭证进入 Pod 后用curl访问 AWS 元数据服务地址验证是否获得了角色凭证$ curl http://169.254.169.254/latest/meta-data/iam/security-credentials/如果输出返回了对应角色的临时安全凭证说明 kiam 的 Agent→Server→STS 链路已打通。若出现前文所述 error finding role for pod: ... there is no connection available 之类的 Agent 日志请优先检查 Server 证书的 SAN 是否包含 Agent 实际使用的连接地址。卸载 kiam卸载my-release这个 release$ helm delete my-release该命令会删除与该 chart 关联的所有 Kubernetes 组件DaemonSet、Service、Secret、RBAC、ServiceAccount、PodSecurityPolicy 等并删除 release 记录。相关资源索引核心文档stable/kiam/README.mdChart 元数据含废弃标记与版本信息stable/kiam/Chart.yaml默认配置值stable/kiam/values.yaml模板实现templates/agent-daemonset.yaml、templates/server-daemonset.yaml、templates/_helpers.tpl、templates/agent-secret.yaml、templates/server-secret.yamlRBAC 与安全templates/server-read-clusterrole.yaml、templates/server-write-clusterrole.yaml使用指引templates/NOTES.txtCI 测试配置示例含完整 base64 证书ci/test-values.yaml需要提醒的是由于本 chart 已标记为 deprecated生产环境新部署建议优先评估 uSwitch 官方维护的 kiam Helm chart但了解本 chart 的架构与参数体系仍然对理解 kiam 的工作原理和迁移旧环境具有直接的参考价值。赞分享【免费下载链接】charts⚠️(OBSOLETE) Curated applications for Kubernetes项目地址https://gitcode.com/gh_mirrors/chart/charts点击查看免费下载相关推荐Tails Components 卡片组件大全产品、博客与用户卡片设计技巧Tails Components 卡片组件大全产品、博客与用户卡片设计技巧 Tails Components 是一个基于 TailwindCSS 构建的开源组AWS IAM Authenticator Helm Chart 实战在 Kubernetes 集群中部署 IAM 角色映射认证组件AWS IAM Authenticator Helm Chart 实战在 Kubernetes 集群中部署 IAM 角色映射认证组件 本篇技术指南围绕 staHelm Chart 实战在 Kubernetes 集群中部署 AWS ALB Ingress ControllerHelm Chart 实战在 Kubernetes 集群中部署 AWS ALB Ingress Controller 本文基于当前仓库中的 incubator创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考