对于上下文,我在一家大公司工作,团队在不同的 Cloud (Azure和IBM Cloud 以前的Bluemix) . Ops团队最终将控制Jenkins大师,但由于我的团队是第一个需要这个,我们正在设置它 .
我们有什么:
-
Jenkins master在Azure( cloud A ),最新版本,我们有Kubernetes插件(以及其他)可以动态配置代理 .
-
我的团队在IBM Kubernetes集群中工作( cloud B ) . 在这个 Cloud 中,我们在k8s集群中有一个devops命名空间,我们希望在其中创建和运行从属代理 . 在这个 Cloud 中,我们还在该命名空间,角色和角色绑定中创建了一个服务帐户 .
问题:配置Jenkins master以在IBM Cloud中连接此类命名空间以配置代理并根据需要运行作业 . 特别是,在Jenkins> Manage> COnfigure System> Cloud中 . 我在这里:
-
Kubernetes URL设置为集群主节点的IP:端口
-
Kubernetes服务器证书密钥,我在这里放了我创建服务帐户时获得的证书 .
-
命名空间,凭据我有服务帐户,最后是Jenkins URL .
当我尝试该配置,并测试我得到的连接:
测试连接错误https:// ip:port:执行失败:GET at:https:// ip:port / api / v1 / namespaces / devops / pods . 消息:未经授权!配置的服务帐户没有访问权限 . 服务帐户可能已被撤销 . 未经授权 .
问题:
-
任何人都知道如何做到这一点或链接到类似的东西?
-
在图片中,我应该在kubernetes网址中添加什么?根据文档,我应该进入容器引擎集群 endpoints ,那在IBM Cloud中是什么?我有主节点的IP和端口 .
我从IBM阅读了很多文档,Jenkins的kubernetes插件(https://github.com/jenkinsci/kubernetes-plugin)以及大量其他帖子,解释了如何使用kubernetes和动态配置来配置jenkins,其中许多人说可能让jenkins和奴隶有所不同 Cloud ,但没有人解释如何做到这一点..
先感谢您 .
UPDATE
在下面的屏幕截图中,我展示了我正在使用的配置 . 特别是字段 Kubernetes URL 和 namespace .
感谢@ samhain1138到目前为止他的帮助,但 I cannot get a connection test successful 在Jenkins Kubernetes插件配置部分 . 我想我可能没有在该部分的某些字段中输入正确的信息 .
注意:请记住我的设置如下:Jenkins master位于Cloud A(Azure)中,我希望代理节点运行在另一个 Cloud 中的另一个集群中,称之为Cloud B(在我的情况下是IBM) Cloud ) .
在上面的屏幕截图中,我确定我有 Kubernetes URL 和 namespace 的正确值,但我不确定其他字段( Kubernetes server certificate key 和 Credentials . )
在 Kubernetes server certificate key 字段中我尝试了:
-
IBM中kubernetes集群中服务帐户的ca.cert . (获得1.创建服务帐户,获取该服务帐户的秘密,并从此类秘密中提取ca.cert)
-
来自服务器的"Token",我在IBM的kubernetes集群中进行kubectl配置视图 . 当您执行命令"kubectl config view"时,令牌位于字段users> user> auth-provider> config> id-token中
在凭据中,我创建并尝试了不同的 Kinds :
-
用户名和密码:我使用IBM集群的凭据和服务帐户凭据尝试了这一点(当我创建服务帐户,角色和角色绑定时,我注意到创建的用户是serviceaccountname-namespace-cluster)
-
Kubernetes服务帐户
我尝试了所有这些组合,但永远不会得到 Connection Successful when Testing the Connection .
Erros我得到:
-
测试连接错误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"中的pod .
1 回答
好吧,你需要改变Jenkins大师的一些东西 UI 如果我理解正确在您的Azure帐户中运行 .
首先,Jenkins主人正在尝试连接到本地(Azure)Kubernetes主人 .
您必须将其设置为解析为在IBM上运行的Kubernetes master的内容 .
就此而言,主机名 not 将以".local"结尾 .
我怀疑你的凭据是否会出现不同的错误),所以你也需要更新这些凭据 .
这包括here,当你完成后,here(在"Then, set up the HTTP credentials by following these steps"下,忽略用于获取密码的gcloud命令) .
确保IBM上的Kubernetes master可以使用"test connection"按钮访问 from 上的Jenkins master .
然后你似乎也混淆了Kubernetes命名空间设置 .
您的服务帐户使用
devops
命名空间,而Jenkins主服务器配置为使用kubernetes-plugin
命名空间 .服务帐户对应于名称空间,因此您需要将该设置更新为
devops
.这仍然是一个非常糟糕的主意,特别是在安全性方面(如果我嗅探你的连接,我可以复制并使用你的IBM k8s master的密码服务帐户,这允许我启动pod!) .
你真的应该在IBM上运行Jenkins master,或者如果你有充分的理由进行这种奇怪的设置,至少要确保这个连接通过VPN ...