【发布时间】:2019-03-02 12:18:52
【问题描述】:
就上下文而言,我在一家大型公司工作,该公司的团队位于不同的云(Azure 和 IBM 云,前身为 Bluemix)。 Ops 团队最终将控制 Jenkins master,但由于我的团队是第一个需要这个的,我们正在设置它。
我们有什么:
- Jenkins master 位于最新版本的 Azure (cloud A) 中,我们拥有 Kubernetes 插件(以及其他插件)来动态配置代理。
- 我的团队在 IBM Kubernetes 集群(cloud B)中工作。在这个云中,我们在 k8s 集群中有一个用于 devops 的命名空间,我们希望在其中创建和运行从代理。在这个云中,我们还在该命名空间、角色和角色绑定中创建了一个服务帐户。
问题:配置 Jenkins 主服务器以连接 IBM 云中的此类命名空间,以根据需要配置代理并运行作业。 具体来说,在 Jenkins > 管理 > 配置系统 > 云中。 我有:
- Kubernetes URL 设置为集群主节点的 IP:port
- Kubernetes 服务器证书密钥,我把创建服务帐户时得到的证书放在这里。
- 命名空间、凭据我有服务帐户,最后是 Jenkins URL。
当我尝试该配置并测试我得到的连接时:
错误测试连接https://ip:port:执行失败:GET at: https://ip:port/api/v1/namespaces/devops/pods。消息:未经授权! 配置的服务帐户无权访问。服务帐号可能 已被撤销。未经授权。
问题:
- 有人知道怎么做或者有类似的链接吗?
- 在图片中,我应该在 kubernetes URL 中输入什么?根据文档,我应该输入容器引擎集群端点,IBM Cloud 中的那个是什么?我有 Master 节点的 IP 和端口。
我已经阅读了很多来自 IBM 的文档、Jenkins 的 kubernetes 插件 (https://github.com/jenkinsci/kubernetes-plugin) 以及解释如何使用 kubernetes 和动态配置配置 jenkins 的大量其他帖子,其中许多人说可以拥有 jenkins和不同云中的奴隶,但没有人解释如何做到这一点..
提前谢谢你。
++++++++++++++++++++更新+++++++++++++++++++++++
在下面的屏幕截图中,我展示了我正在使用的配置。特别是 Kubernetes URL 和 namespace 字段。
感谢 @samhain1138 迄今为止的帮助,但 我无法在 Jenkins Kubernetes 插件配置部分成功连接测试。我想我可能没有在该部分的某些字段中输入正确的信息。
注意:请记住,我的设置如下:Jenkins master 在 Cloud A (Azure) 中,我希望代理节点运行在另一个云中的不同集群中,称之为 Cloud B(在我的案例是 IBM Cloud)。
在上面的屏幕截图中,我确定 Kubernetes URL 和 namespace 的值正确,但我不确定其他字段(Kubernetes服务器证书密钥和凭据。)
在 Kubernetes 服务器证书密钥 字段中,我尝试输入:
- IBM Kubernetes 集群中服务帐户的 ca.cert。 (通过 1. 创建服务帐户,获取该服务帐户的秘密,并从该秘密中提取 ca.cert 获得)
- 来自服务器的“令牌”,我在 IBM 的 kubernetes 集群中进行 kubectl 配置视图。执行命令“kubectl config view”时,令牌位于字段 users>user>auth-provider>config>id-token
在凭据中,我创建并尝试了不同的种类:
- 用户名和密码:我使用 IBM 集群的凭据和服务帐户凭据尝试了此操作(当我创建服务帐户、角色和角色绑定时,我注意到创建的用户是 serviceaccountname-namespace-集群)
- Kubernetes 服务帐号
我尝试了所有这些组合,但始终无法在测试连接时连接成功。
我得到的错误:
测试连接 https://APISERVER 时出错:执行失败:GET at:https://APISERVER/api/v1/namespaces/a-devops-namespace/pods。消息:未经授权!配置的服务帐户无权访问。服务帐户可能已被撤销。未经授权。
测试连接 https://APISERVER 时出错:执行失败:GET at:https://APISERVER/api/v1/namespaces/a-devops-namespace/pods。消息:禁止!配置的服务帐户无权访问。服务帐户可能已被撤销。 pods 被禁止:用户“system:anonymous”不能列出命名空间“a-devops-namespace”中的 pods。
【问题讨论】:
-
您对服务帐户进行了哪些尝试,您使用的是什么服务帐户?
-
@Rico 在集群的命名空间中我计划运行从属服务器,我创建了一个 serviceAccount,一个角色,并将它与角色绑定绑定。我得到了它的秘密的 ca.cert 并把它放在 Jenkins > kubernetes 服务器证书密钥中。
-
@Alo 你没有很好地解释错误;是什么引发了错误?是当 cloud A 上的 Jenkins master 尝试打开与 cloud B 上的 Kubernetes master 的连接时?在这种情况下,必须在 cloud B 而不是 cloud A 上配置服务帐户
-
嗨@samhain1138,我会在一分钟内编辑这个问题,但要回答你的问题,是的,这正是我的意思,我做到了。我在云 A(天蓝色)中有 Jenkins,在云 B(IBM)中有一个集群和命名空间。我在云 B 中获得了一个 serviceAccount、role 和 rolebinding,并将其证书放在 jenkins(在云 A 中)部分 kubernetes 的配置中,当我尝试测试连接时,我收到了该错误消息。
-
@Alo 您是如何在云 B 上创建服务帐户的?云 B 上是否启用了 RBAC?
标签: jenkins kubernetes azure-devops ibm-cloud devops