2016-07-26 3 views
0

マスターノードでTLSを使用してapiserverをデプロイしたところ、うまくいきましたが、kubeletをデプロイしてapiserverと通信するときに問題が発生しました。 kubelet confが次のように:なぜkubeletがTLSを使用してapiserverと通信する必要があるのですか?v1.3

/opt/bin/kubelet \ 
    --logtostderr=true \ 
    --v=0 \ 
    --api_servers=https://kube-master:6443 \ 
    --address=0.0.0.0 \ 
    --port=10250 \ 
    --allow-privileged=false \ 
    --tls-cert-file="/var/run/kubernetes/kubelet_client.crt" \ 
    --tls-private-key-file="/var/run/kubernetes/kubelet_client.key" 
    --kubeconfig="/var/lib/kubelet/kubeconfig" 

の/ var/libに/ kubelet/kubeconfigは以下の通りです:

apiVersion: v1 
kind: Config 
users: 
- name: kubelet 
    user: 
    client-certificate: /var/run/kubernetes/kubelet_client.crt 
    client-key: /var/run/kubernetes/kubelet_client.key 
clusters: 
- name: kube-cluster 
    cluster: 
    certificate-authority: /var/run/kubernetes/ca.crt 
contexts: 
- context: 
    cluster: kube-cluster 
    user: kubelet 
    name: ctx-kube-system 
current-context: ctx-kube-system 

私は双方向(クライアントとサーバーの両方)を使用してコミュを達成したいと私が試した

> kubectl version 
> Client Version: version.Info{Major:"1", Minor:"3", GitVersion:"v1.3.2", GitCommit:"9bafa3400a77c14ee50782bb05f9efc5c91b3185", GitTreeState:"clean", BuildDate:"2016-07-17T18:30:39Z", GoVersion:"go1.6.2", Compiler:"gc", Platform:"linux/amd64"} 
> Please enter Username: kubelet 
> Please enter Password: kubelet 
> error: You must be logged in to the server (the server has asked for the client to provide credentials) 

:次のようにいくつかのコマンドライン、私の前に使用したことがない私のユーザー名とパスワードを提供するために、私に尋ねるapiserver CA認証とfluky返事を期待していますが、誰もこのミニチュアミニオンでこれらのすべてを解決してもらえますか?事前に感謝します。

+0

はあなたの絶好の助けをありがとう@SvenWalter:!サプリメントとして、 '--client-CA-file'オプションは、すでにapiserver上で使用することが、私は使用してノード情報を取得しようとしている: 'カールHTTPSを: // kube-master:6443/api/v1/nodes --cert /var/run/kubernetes/server.crt --key /var/run/kubernetes/server.key --cacert/var/run/kubernetes/ca .crt' クライアント証明書の認証問題に属していない可能性がありますか?crtは自己署名されたファイルですが、このメーターですか? – aeolus

+0

CA証明書は自己署名されていませんが、クライアント証明書はCA証明書に署名する必要があります。 – svenwltr

答えて

1

クライアント証明書の承認を、apiserverの--client-ca-fileフラグで有効にする必要があります。 http://kubernetes.io/docs/admin/authentication/から

クライアント証明書認証はapiserverに--client-ca-file=SOMEFILEオプションを渡すことで有効になります。参照されるファイルには、apiserverに提示されるクライアント証明書を検証するために使用する1つ以上の証明機関が含まれている必要があります。クライアント証明書が提示され、検証された場合、サブジェクトの共通名が要求のユーザー名として使用されます。

--client-ca-file=""http://kubernetes.io/docs/admin/kube-apiserver/から

設定されている場合、クライアント-CA-ファイルに権限のいずれかによって署名されたクライアント証明書を提示する任意の要求がののCommonNameに対応したIDで認証されていますクライアント証明書。 --cloud-config="":クラウドプロバイダ構成ファイルへのパス。構成ファイルがない場合は、空の文字列。

+1

また、kubelet側では、kubelet引数の '--tls-cert-file'と' --tls-private-key-file'はクライアント証明書ではなくkubelet * serving * certを参照する必要があります –

+0

@JordanLiggitt:はい、それは証明書を提供しています、私はこれらのファイルの名前を変更します。env(kubeletもmaster minionで削除されます)のため、同じCNをcrtファイルに使用します。 – aeolus

関連する問題