我基本上没有找到关于如何使用Jenkins Kubernetes 插件使用 Amazon EKS。文档提到 aws-iam-authenticator 和 java 设置来更改缓存超时,但没有解释如何配置任何内容。
如果我将 EKS 集群的 API URL 放在“Kubernetes URL”字段中并单击“测试连接”按钮,我会收到有关认证路径的错误:
Error testing connection https://XXX.gr7.us-west-2.eks.amazonaws.com: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
如果我选中“禁用 https 证书检查”复选框,我会收到有关“system:anonymous”用户没有正确权限的错误:
Error testing connection https://XXX.gr7.us-west-2.eks.amazonaws.com: Failure executing: GET at: https://XXX.gr7.us-west-2.eks.amazonaws.com/api/v1/namespaces/default/pods. Message: pods is forbidden: User "system:anonymous" cannot list resource "pods" in API group "" in the namespace "default". Received status: Status(apiVersion=v1, code=403, details=StatusDetails(causes=[], group=null, kind=pods, name=null, retryAfterSeconds=null, uid=null, additionalProperties={}), kind=Status, message=pods is forbidden: User "system:anonymous" cannot list resource "pods" in API group "" in the namespace "default", metadata=ListMeta(_continue=null, remainingItemCount=null, resourceVersion=null, selfLink=null, additionalProperties={}), reason=Forbidden, status=Failure, additionalProperties={}).
运行 jenkins 主服务器的 EC2 实例具有具有完整 eks:* 权限的 IAM 角色。如果我使用 IAM 角色设置凭据,它不会显示在凭据下拉列表中。具有 AWS 访问权限和密钥的凭据也不会显示在凭据下拉列表中。
答案1
去过那里并且解决了这个问题。
如果你已将 kubeconfig 设置为使用aws eks get-token ..
,请确保您的 Jenkins Master 具有 AWS CLI 版本 1.16.300 及更高版本,该版本支持使用 aws-cli 获取令牌。
如果您已设置 kubeconfig 以使用aws-iam-authenticator
,请确保您已在 Jenkins 主服务器上安装了 AWS IAM Authenticator,并且用户jenkins
能够使用二进制文件(路径设置)。
这应该可以帮助您解决连接测试期间的“system:anonymous”错误。
最后,如果您遇到类似这样的错误Unauthorized! Token may have expired! Please log-in again. Unauthorized.
,那么您需要确保两件事:
- 确保 kubernetes-plugin 的插件版本至少为 1.23.2。这将需要 Jenkins 版本至少为 2.190.1。此版本是后续步骤所必需的。
- 如上所述,此 Java 设置在 Jenkins Java 选项中设置这里:
JAVA_ARGS="-Dorg.csanchez.jenkins.plugins.kubernetes.clients.cacheExpiration=60"
。默认值为 24 小时,而 EKS 每 15 分钟使令牌过期一次。此设置为 60 表示每 60 秒清除一次令牌。`