我試圖使用證書與本地託管的Kubernetes集羣(v1.6.4)進行身份驗證。 這參與使用Kubernetes plugin for Jenkins的上下文。Kubernetes身份驗證與證書
我下面的Minikube準則在Kubernetes-plugin README文件,我適應我的方案:
轉換的客戶端證書PKCS:
$ sudo openssl pkcs12 -export -out kubernetes.pfx -inkey /etc/kubernetes/pki/apiserver.key -in /etc/kubernetes/pki/apiserver.crt -certfile /etc/kubernetes/pki/ca.crt -passout pass:jenkins
在詹金斯,使用創建憑證證書
Kind
:Certificate
Certificate
:Upload PKCS#12 certificate
和上傳文件kubernetes.pfx
Password
:jenkins
(證書創建期間指定)
Manage Jenkins
- >Add new cloud
- >Kubernetes
Kubernetes URL
:https://10.179.1.121:6443
(如輸出由kubectl config view
)Kubernetes server certificate key
:粘貼/etc/kubernetes/pki/ca.crt
的內容。Disable https certificate check
:檢查,因爲測試裝置不具有簽名的證書Kubernetes Namespace
:嘗試都default
和kubernetes-plugin
Credentials
:CN=kube-apiserver
(即上面創建的憑證)現在,當我點擊Test Connection
,這是Jenkins Web UI中顯示的錯誤消息:
連接到https://10.179.1.121:6443時出錯:執行失敗:GET:https://10.179.1.121:6443/api/v1/namespaces/kubernetes-plugin/pods。訊息:未經授權。
詹金斯日誌顯示此消息:
2017年9月5日上午10時22分03秒io.fabric8.kubernetes.client.Config tryServiceAccount
警告:錯誤閱讀服務帳戶令牌來自:[/var/run/secrets/kubernetes.io/serviceaccount/token]。忽略。
的文檔,不幸的是,大多侷限於Kubernetes上Minikube和谷歌雲引擎運行,但我沒有看到前者和本地託管Kubernetes集羣之間的概念上的差異。
在一個非常不同的錯誤信息,下列curl調用的測試結果:
$ curl --insecure --cacert /etc/kubernetes/pki/ca.crt --cert kubernetex.pfx:secret https://10.179.1.121:6443
User "system:anonymous" cannot get at the cluster scope.
更詳細:
$ curl -v --insecure --cacert /etc/kubernetes/pki/ca.crt --cert kubernetex.pfx:secret https://10.179.1.121:6443
* About to connect() to 10.179.1.121 port 6443 (#0)
* Trying 10.179.1.121...
* Connected to 10.179.1.121 (10.179.1.121) port 6443 (#0)
* Initializing NSS with certpath: sql:/etc/pki/nssdb
* skipping SSL peer certificate verification
* NSS: client certificate not found: kubernetex.pfx
* SSL connection using TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
* Server certificate:
* subject: CN=kube-apiserver
* start date: Jun 13 11:33:55 2017 GMT
* expire date: Jun 13 11:33:55 2018 GMT
* common name: kube-apiserver
* issuer: CN=kubernetes
> GET/HTTP/1.1
> User-Agent: curl/7.29.0
> Host: 10.179.1.121:6443
> Accept: */*
>
< HTTP/1.1 403 Forbidden
< Content-Type: text/plain
< X-Content-Type-Options: nosniff
< Date: Tue, 05 Sep 2017 10:34:23 GMT
< Content-Length: 57
<
* Connection #0 to host 10.179.1.121 left intact
我還建立了一個ServiceAccount:
$ kubectl describe serviceaccount --namespace=kubernetes-plugin
Name: default
Namespace: kubernetes-plugin
Labels: <none>
Annotations: <none>
Image pull secrets: <none>
Mountable secrets: default-token-6qwj1
Tokens: default-token-6qwj1
Name: jenkins
Namespace: kubernetes-plugin
Labels: <none>
Annotations: <none>
Image pull secrets: <none>
Mountable secrets: jenkins-token-1d623
Tokens: jenkins-token-1d623
This question涉及相關問題,建議使用ServiceAccount或證書,但後者的答案缺乏關於如何將RBAC配置文件與該證書綁定的詳細信息。 Kubernetes documentation about authentication似乎沒有涵蓋這個用例。
我使用kubeadm創建了集羣,因此沒有手動擺弄這些參數。任何建議,以解決這個問題,而無需重新啓動kube-apiserver? – Carsten