2017-12-14 4 views
1

kubectl -proxyを実行せずにKubernetes APIに直接アクセスしようとしています。 しかし、私はserviceaccountのデフォルトのトークンを使用する場合、私はこれでもserviceaccountためClusterRoleとClusterRoleBindingを作成した後に403 を取得するには、要求は403kubectlを使用しないKubernetes APIにアクセス

私はこのようなルックスを適用した構成で拒否されています

apiVersion: rbac.authorization.k8s.io/v1 
kind: ClusterRole 
metadata: 
    name: pod-reader 
rules: 
- apiGroups: [""] 
    resources: ["pods"] 
    verbs: ["get", "watch", "list"] 
--- 
kind: ClusterRoleBinding 
apiVersion: rbac.authorization.k8s.io/v1 
metadata: 
    name: pod-reader 
subjects: 
- kind: ServiceAccount 
    name: default 
    namespace: default 
roleRef: 
    kind: ClusterRole 
    name: pod-reader 
    apiGroup: rbac.authorization.k8s.io 

(これはほぼkubernetes IO上のドキュメントからの1つである、ちょうど件名としてServiceAccountを使用し、ポッドにリソースを変更)

は、それから設定を適用し、カールを介してポッドにアクセスしようとした:

$ kubectl apply -f secrets.yaml 
clusterrole "pod-reader" created 
clusterrolebinding "pod-reader" created 
$ curl https://192.168.1.31:6443/v1/api/namespaces/default/pods --header "Authorization: Bearer $TOKEN" --insecure 
{ 
    "kind": "Status", 
    "apiVersion": "v1", 
    "metadata": { 

    }, 
    "status": "Failure", 
    "message": "forbidden: User \"system:serviceaccount:default:default\" cannot get path \"/v1/api/namespaces/default/pods\"", 
    "reason": "Forbidden", 
    "details": { 

    }, 
    "code": 403 
} 

リクエストがserviceaccount default:defaultから来ると正しく識別されたように見えるため、エラーメッセージに認証部分が表示されているようです。 しかし、この(または別のサービスアカウント)がポッドやノードに関する情報にアクセスできるようにするにはどうすればよいですか?

Podの外からcurlを呼び出すときにこのエラーが表示されますが、たとえば - kubernetes javaクライアントを使用して/ var/run/secretsにマウントされたシークレットを使用してPodからAPIにアクセスする場合もこのエラーが発生します。

私はK8sの初心者ですので、これが愚かな質問であれば私を許してください。

設定について: 私は、Masterと2つのWorker Nodesを持つRaspberry PisのクラスタでK8 1.8を実行しています。 私はkubeadm initにほとんど渡しませんでしたので、デフォルトの設定にする必要があります。 FWIWはapiserverのためのショーにこのコマンドを記述kubectl:私はあなたがあなたのカールパスに少し問題があると思う

kube-apiserver 
    --requestheader-group-headers=X-Remote-Group 
    --service-account-key-file=/etc/kubernetes/pki/sa.pub 
    --admission-control=Initializers,NamespaceLifecycle,LimitRanger,ServiceAccount,PersistentVolumeLabel,DefaultStorageClass,DefaultTolerationSeconds,NodeRestriction,ResourceQuota 
    --secure-port=6443 
    --requestheader-client-ca-file=/etc/kubernetes/pki/front-proxy-ca.crt 
    --proxy-client-cert-file=/etc/kubernetes/pki/front-proxy-client.crt 
    --proxy-client-key-file=/etc/kubernetes/pki/front-proxy-client.key 
    --advertise-address=192.168.1.31 
    --service-cluster-ip-range=10.96.0.0/12 
    --tls-cert-file=/etc/kubernetes/pki/apiserver.crt 
    --tls-private-key-file=/etc/kubernetes/pki/apiserver.key 
    --kubelet-client-certificate=/etc/kubernetes/pki/apiserver-kubelet-client.crt 
    --kubelet-client-key=/etc/kubernetes/pki/apiserver-kubelet-client.key 
    --enable-bootstrap-token-auth=true 
    --requestheader-username-headers=X-Remote-User 
    --allow-privileged=true 
    --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname 
    --requestheader-extra-headers-prefix=X-Remote-Extra- 
    --requestheader-allowed-names=front-proxy-client 
    --client-ca-file=/etc/kubernetes/pki/ca.crt 
    --insecure-port=0 
    --authorization-mode=Node,RBAC 
    --etcd-servers=http://127.0.0.1:2379 

答えて

関連する問題