2017-03-28 14 views
1

私は、リモートクライアントからのHTTP REST APIサーバーアクセスのトークン認証を有効にしようとしています。Kubernetes:API Serverベアラトークン認証を有効にする方法は?

私はこのスクリプトを使用して、私のCoreOS/K8Sクラスタコントローラをインストール:https://github.com/coreos/coreos-kubernetes/blob/master/multi-node/generic/controller-install.sh

私クラスタが正常に動作します。これはTLSインストールですので、クライアント証明書を使用してkubectlクライアントを構成して、クラスタにアクセスする必要があります。

私はその後、ランニングを経由してトークン認証を有効にしてみました:

echo `dd if=/dev/urandom bs=128 count=1 2>/dev/null | base64 | tr -d "=+/" | dd bs=32 count=1 2>/dev/null` 

これは私にトークンを提供します。

- --token-auth-file=/etc/kubernetes/token 
:私は、その後に追加する/etc/kubernetes/manifests/kube-apiserver.yamlを修正

$> cat /etc/kubernetes/token 

3XQ8W6IAourkXOLH2yfpbGFXftbH0vn,default,default 

:私は、トークンと、デフォルトのユーザーを含む私のコントローラ上のトークンファイルにトークンを追加しました スタートアップのparamリストに

私は、リモートサーバーからのkubectlが働いて終了し、この時点で(それ自体でAPIサーバーを再起動するかわからない最良の方法??)

を再起動します(接続しません)。私はコントローラでdocker psを見て、apiサーバを見ます。私はdocker logs container_idを実行し、出力は得られません。私は他のドッキングウィンドウコンテナを見れば私のような出力が表示されます。

E0327 20:05:46.657679  1 reflector.go:188] 
    pkg/proxy/config/api.go:33: Failed to list *api.Endpoints: 
    Get http://127.0.0.1:8080/api/v1/endpoints?resourceVersion=0: 
dial tcp 127.0.0.1:8080: getsockopt: connection refused 

だから、私のAPI-server.yaml設定は、それが正常に起動からAPIサーバーを防ぐことが表示されます....

上の任意の提案ベアラトークンREST認証のためのAPIサーバーを構成する適切な方法は?

TLS設定とベアラトークン認証の両方を設定することはできますか?

ありがとうございます!

答えて

0

あなたのkube-apiserverは、/etc/kubernetes/tokenが見つからないので、死ぬと思います。これは、デプロイメント時にapiserverが静的ポッドであるため、コンテナ内で実行されるため、ホストとは異なるルートファイルシステムを持つことになります。

/etc/kubernetes/manifests/kube-apiserver.yamlを調べてvolumeと、この(私は変更する必要はありませんラインを省略しているし、正しいセクションを見つけるには役立ちません)のようなvolumeMount追加:

kind: Pod 
metadata: 
    name: kube-apiserver 
spec: 
    containers: 
    - name: kube-apiserver 
    command: 
    - ... 
    - --token-auth-file=/etc/kubernetes/token 
    volumeMounts: 
    - mountPath: /etc/kubernetes/token 
     name: token-kubernetes 
     readOnly: true 
    volumes: 
    - hostPath: 
     path: /etc/kubernetes/token 
    name: token-kubernetes 

もう一つ注意を: tokenとして引用したファイルはではないの最後に.(ドット) - おそらくそれはコピー貼り間違いでしたが、とにかくそれをチェックしてください。フォーマットはstatic token fileの下で文書化されています

トークン、ユーザー、UID、 "GROUP1、グループ2、グループ3"

問題のperistsは、以下のコマンドを実行し、出力を投稿する場合:

journalctl -u kubelet | grep kube-apiserver 
+0

ありがとう! apiサーバがファイルにアクセスできないということを完全に理解します。はい、 '。'最後は意図的ではなく、質問から削除された –

関連する問題