2017-12-14 10 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 이오에, 그냥 주제 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에서 오는 것으로 정확하게 식별 된 것처럼 보이기 때문에 오류 메시지가 인증 부분을 확인했다고 생각합니다. 그러나이 (또는 다른 서비스 계정)이 포드 또는 노드에 대한 정보에 액세스 할 수있게하려면 어떻게해야합니까?

포드 외부에서 curl을 호출 할 때이 오류가 표시됩니다. 예를 들어 - kubernetes java 클라이언트를 사용하여/var/run/secrets 아래에 마운트 된 비밀 번호를 사용하여 포드 내에서 API에 액세스 할 수도 있습니다.

저는 K8 초보자입니다. 어리석은 질문 인 경우 용서해주세요.

구성 : 하나의 마스터와 2 개의 작업자 노드가있는 Raspberry Pis 클러스터에서 K8 1.8을 실행했습니다. kubeadm init에 많은 것을 전달하지 않았으므로 기본 구성을 가지고 있어야합니다. FWIW의 kubectl가 apiserver위한 쇼에게이 명령을 설명합니다

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 

답변