访问无kubectl的Kubernetes API



我正在尝试直接访问kubernetes API而不运行kubectl -proxy。但是,当我使用serviceaccount的令牌时,我会得到403。即使为此serviceAccount创建了群集和簇 - 限制群集,该请求也会被403拒绝。

我应用的配置看起来像这样:

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上的文档中的一个,只是将ServiceAccount用作主题,然后将资源更改为Pods)

然后我应用了配置,并尝试通过卷发访问豆荚:

$ 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默认值:默认值。但是,我需要做什么才能使此(或其他服务帐户)访问有关POD或节点的信息?

我会在吊舱外调用卷曲时看到此错误,但例如,如果我使用kubernetes java客户端,请使用在/var/run/secrets.pod下访问pod中的API。P>

我是K8S Newbie,所以如果这是一个愚蠢的问题,请原谅我。

关于配置:我的K8S 1.8在一群覆盆子PI上运行,带有一个大师和两个工人节点。我并没有将库比德姆·init(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

我认为您在卷曲路径中有一个小问题,它应该是/api/v1/namespaces/...而不是/v1/api/namespaces/...。参见例如https://kubernetes.io/docs/api-reference/v1.8/#list-62

相关内容

  • 没有找到相关文章

最新更新