我已经用kubeadm kubernetes 1.9 rbac群集自行启动,并且我已经在基于jenkins/jenkins的Pod Jenkins内部开始。我想尝试https://github.com/jenkinsci/kubernetes-plugin。我已经根据https://gist.github.com/lachie83/17c1fff4eb58cf75cf75fb11a4957a64d2
中的提案创建了一个ServiceAccount> kubectl -n dev-infra create sa jenkins
> kubectl create clusterrolebinding jenkins --clusterrole cluster-admin --serviceaccount=dev-infra:jenkins
> kubectl -n dev-infra get sa jenkins -o yaml
apiVersion: v1
kind: ServiceAccount
metadata:
creationTimestamp: 2018-02-16T12:06:26Z
name: jenkins
namespace: dev-infra
resourceVersion: "1295580"
selfLink: /api/v1/namespaces/dev-infra/serviceaccounts/jenkins
uid: d040041c-1311-11e8-a4f8-005056039a14
secrets:
- name: jenkins-token-vmt79
> kubectl -n dev-infra get secret jenkins-token-vmt79 -o yaml
apiVersion: v1
data:
ca.crt: LS0tL...0tLQo=
namespace: ZGV2LWluZnJh
token: ZXlK...tdVE=
kind: Secret
metadata:
annotations:
kubernetes.io/service-account.name: jenkins
kubernetes.io/service-account.uid: d040041c-1311-11e8-a4f8-005056039a14
creationTimestamp: 2018-02-16T12:06:26Z
name: jenkins-token-vmt79
namespace: dev-infra
resourceVersion: "1295579"
selfLink: /api/v1/namespaces/dev-infra/secrets/jenkins-token-vmt79
uid: d041fa6c-1311-11e8-a4f8-005056039a14
type: kubernetes.io/service-account-token
之后,我去管理jenkins->配置系统 -> cloud-> kubernetes,然后将kubernetes URL设置为我在kubectl kubectl kubeconfig服务器中也使用的群集API:url:url:port。
击打测试连接时,我将获得"错误测试连接https://url:port:port执行:get at:https://url:port/api/api/v1/v1/namespaces/dev-infra/pods。消息:消息:消息:禁止!配置的服务帐户没有访问权限。服务帐户可能已被撤销。禁止使用POD:用户"系统:ServiceAccount:serviceaccount:dev-infra:default:default"无法在名称空间" dev-infra"中列出pods。
我不想给dev-infra:默认用户一个群集 - admin角色,我想使用我创建的jenkins sa。我不明白如何在Jenkins中配置凭据。当我在https://github.com/jenkinsci/kubernetes-plugin/blob/blob/master/master/configuration.png上添加凭据时
<select class="setting-input dropdownList">
<option value="0">Username with password</option>
<option value="1">Docker Host Certificate Authentication</option>
<option value="2">Kubernetes Service Account</option>
<option value="3">OpenShift OAuth token</option>
<option value="4">OpenShift Username and Password</option>
<option value="5">SSH Username with private key</option>
<option value="6">Secret file</option>
<option value="7">Secret text</option>
<option value="8">Certificate</option></select>
我找不到一个明确的示例,如何配置Jenkins Kubernetes Cloud Connector来使用我的Jenkins使用服务帐户Jenkins进行身份验证。您能帮我找到分步指南吗?我需要哪种证书?
问候,Pavel
最好的做法是使用您创建的serviceaccount
启动Jenkins Master Pod,而不是在Jenkins中创建凭据
参见示例yaml
Jenkins的Kubernetes插件读取此文件/var/run/secrets/kubernetes.io/serviceaccount/token
。请查看您的Jenkins Pod是否有此。该服务帐户应具有适当命名空间中的POD的权限。
实际上,我们正在使用jenkins在Kubernetes 1.9之外运行的Jenkins。我们只是选择了默认服务帐户令牌(默认名称空间(,然后将其放在Jenkins Master上。重新启动...可见kubernetes代币凭据类型。
我们确实有角色和角色扮演:
kubectl create role jenkins --verb=get,list,watch,create,patch,delete --resource=pods
kubectl create rolebinding jenkins --role=jenkins --serviceaccount=default:default
在我们的情况下,詹金斯被配置为在默认名称空间中旋转从属吊舱。因此,这种组合有效。
更多问题(类似(:当Jenkins Server不在Kubernetes群集外时,我可以使用Jenkins Kubernetes插件吗?
挖掘后,似乎最简单的方法(在不给默认服务帐户的额外权限的情况下提供名称空间(是
kubectl -n <your-namespace> create sa jenkins
kubectl create clusterrolebinding jenkins --clusterrole cluster-admin --serviceaccount=<your-namespace>:jenkins
kubectl get -n <your-namespace> sa/jenkins --template='{{range .secrets}}{{ .name }} {{end}}' | xargs -n 1 kubectl -n <your-namespace> get secret --template='{{ if .data.token }}{{ .data.token }}{{end}}' | head -n 1 | base64 -d -
似乎您可以将此令牌存储在詹金斯(Jenkins(中,并且插件可以拾取插件。与覆盖默认服务帐户相比,这种方法的另一个优点,如上所述,您可以每个群集都有秘密 - 这意味着您可以使用一个Jenkins连接到例如Dev-> Quality-> Quality-> prod -> prod namespaces或带有单独帐户的群集。
如果您有更好的路要走,请随时做出贡献。
问候,帕维尔
有关更多详细信息,您可以检查:-https://gist.github.com/lachie83/17c1fff4eb58cf75c5fb11a4957a64d2-https://github.com/openshift/origin/issues/6807