首页 文章

如何在不同的 Cloud 中配置Jenkins主代理和动态代理?使用Kubernetes插件

提问于
浏览
0

对于上下文,我在一家大公司工作,团队在不同的 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 URLnamespace .

感谢@ samhain1138到目前为止他的帮助,但 I cannot get a connection test successful 在Jenkins Kubernetes插件配置部分 . 我想我可能没有在该部分的某些字段中输入正确的信息 .

注意:请记住我的设置如下:Jenkins master位于Cloud A(Azure)中,我希望代理节点运行在另一个 Cloud 中的另一个集群中,称之为Cloud B(在我的情况下是IBM) Cloud ) .

enter image description here

在上面的屏幕截图中,我确定我有 Kubernetes URLnamespace 的正确值,但我不确定其他字段( Kubernetes server certificate keyCredentials . )

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我得到:

1 回答

  • 0

    好吧,你需要改变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 ...

相关问题