2017-12-22 5 views
0

Qustion

Wie kann ich mit dem Client-Zertifikat auf die API-Server-API zugreifen? Nachstehend versucht, aber kein Erfolg.K8S (1.9) Zugriff auf API-Server mit Client-Zertifikat

export K8S_PKI_HOME=/etc/kubernetes/pki 
curl -k --key ${K8S_PKI_HOME}/ca.key --cert ${K8S_PKI_HOME}/ca.crt \ 
https://localhost:6443/api/v1/componentstatuses 

{ 
    "kind": "Status", 
    "apiVersion": "v1", 
    "metadata": { 

    }, 
    "status": "Failure", 
    "message": "componentstatuses is forbidden: User \"kubernetes\" cannot list componentstatuses at the cluster scope", 
    "reason": "Forbidden", 
    "details": { 
    "kind": "componentstatuses" 
    }, 
    "code": 403 
} 

Nach X509 Client Certs (Authentication Strategy:

Client-Zertifikatauthentifizierung wird aktiviert, indem die --client-ca-file = somefile Option API-Server übergeben.

Im /etc/kubernetes/manifests/kube-apiserver.yaml, --client-ca-file =/etc/Kubernetes/pki/ca.crt angegeben.

+0

mit einer URL wie 'https: // localhost: 6443/api/v1/componentstatuses', ist es durchaus möglich, dass Sie auch Zugriff auf die _unauthenticated_ Port auf dem Master, in der Regel' http: // localhost : 8080/api/v1/componentstatuses, die sowohl authn als auch authz umgehen konnten –

Antwort

0

Gefunden das Client-Zertifikat und Schlüssel waren falsch.

# sudo curl -iv -L \ 
>  --cert /etc/kubernetes/pki/apiserver-kubelet-client.crt \ 
>  --key /etc/kubernetes/pki/apiserver-kubelet-client.key \ 
>  --cacert /etc/kubernetes/pki/ca.crt \ 
> https://172.31.4.117:6443/healthz 
* About to connect() to 172.31.4.117 port 6443 (#0) 
* Trying 172.31.4.117... 
* Connected to 172.31.4.117 (172.31.4.117) port 6443 (#0) 
* Initializing NSS with certpath: sql:/etc/pki/nssdb 
* CAfile: /etc/kubernetes/pki/ca.crt 
    CApath: none 
* NSS: client certificate from file 
* subject: CN=kube-apiserver-kubelet-client,O=system:masters 
* start date: Dec 23 05:13:30 2017 GMT 
* expire date: Dec 23 05:13:30 2018 GMT 
* common name: kube-apiserver-kubelet-client 
* issuer: CN=kubernetes 
* SSL connection using TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 
* Server certificate: 
* subject: CN=kube-apiserver 
* start date: Dec 23 05:13:30 2017 GMT 
* expire date: Dec 23 05:13:30 2018 GMT 
* common name: kube-apiserver 
* issuer: CN=kubernetes 
> GET /healthz HTTP/1.1 
> User-Agent: curl/7.29.0 
> Host: 172.31.4.117:6443 
> Accept: */* 
> 
< HTTP/1.1 200 OK 
HTTP/1.1 200 OK 
< Date: Mon, 25 Dec 2017 02:10:15 GMT 
Date: Mon, 25 Dec 2017 02:10:15 GMT 
< Content-Length: 2 
Content-Length: 2 
< Content-Type: text/plain; charset=utf-8 
Content-Type: text/plain; charset=utf-8 

< 
* Connection #0 to host 172.31.4.117 left intact 
ok 
2

Es scheint, dass das Client-Zertifikat, das Sie präsentiert haben, erkannt wurde, und authentifizierte Sie als Benutzer "kubernetes".

Der Fehler, den Sie erhalten, ist ein Autorisierungsfehler, keine Authentifizierung.

Der nächste Schritt besteht darin, sicherzustellen, dass der Benutzer berechtigt ist, die API-Aufrufe auszuführen, die er ausführt. Wie Sie das tun, hängt davon ab, welchen Autorisierungsmodus Ihr Server verwendet. Siehe https://kubernetes.io/docs/admin/authorization/ für Details

+0

Danke für die Antwort, aber es war kein Autorisierungsproblem. – mon

Verwandte Themen