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
ありがとうございました!私はとても愚かです... –