2017-12-22 9 views
0

Qustion

クライアント証明書を使用してAPIサーバーAPIにアクセスするにはどうすればよいですか。試してみましたが成功しませんでした。 X509 Client Certs (Authentication Strategyによるとクライアント証明書付きAPIサーバーにアクセスする方法

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 
} 

クライアント証明書認証は、APIサーバに--client-CA-ファイル= somefileというオプションを渡すことで有効になります。 /etc/kubernetes/manifests/kube-apiserver.yamlで

--client-CA-ファイル=の/ etc/kubernetes/PKI/ca.crtが指定されています。

spec: 
    containers: 
    - command: 
    - kube-apiserver 
    - --client-ca-file=/etc/kubernetes/pki/ca.crt 
+0

:// localhostを:// localhostを:6443/API/V1/componentstatuses'、一般的に' HTTP、あなたもマスターの_unauthenticated_ポートへのアクセス権を持っていることは完全に可能です:8080/api/v1/componentstatus' authnとauthzの両方をバイパスできます –

答えて

0

クライアント証明書とキーが見つかりませんでした。 `httpsのようなURLで

# 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

あなたが提示したクライアント証明書が認識され、ユーザー "kubernetes"として認証されているようです。

エラーは認証ではなく、認証エラーです。

次のステップは、ユーザーがAPI呼び出しを実行する権限をユーザーに付与することです。どのように行うかは、サーバーが使用している認証モードによって異なります。詳細については、https://kubernetes.io/docs/admin/authorization/を参照してください。

+0

回答ありがとうございますが、認証に問題はありませんでした。 – mon

関連する問題