准备开始
你必须拥有一个 Kubernetes 的集群,且必须配置 kubectl 命令行工具让其与你的集群通信。 建议运行本教程的集群至少有两个节点,且这两个节点不能作为控制平面主机。 如果你还没有集群,你可以通过 Minikube 构建一个你自己的集群,或者你可以使用下面的 Kubernetes 练习环境之一:
从 Pod 中访问 API
从 Pod 内部访问 API 时,定位 API 服务器和向服务器认证身份的操作与外部客户端场景不同。
从 Pod 使用 Kubernetes API 的最简单的方法就是使用官方的 客户端库。 这些库可以自动发现 API 服务器并进行身份验证。
使用官方客户端库
从一个 Pod 内部连接到 Kubernetes API 的推荐方式为:
- 对于 Go 语言客户端,使用官方的 Go 客户端库。 函数
rest.InClusterConfig()
自动处理 API 主机发现和身份认证。 参见这里的一个例子。 - 对于 Python 客户端,使用官方的 Python 客户端库。 函数
config.load_incluster_config()
自动处理 API 主机的发现和身份认证。 参见这里的一个例子。 - 还有一些其他可用的客户端库,请参阅客户端库页面。
在以上场景中,客户端库都使用 Pod 的服务账号凭据来与 API 服务器安全地通信。
直接访问 REST API
在运行在 Pod 中时,你的容器可以通过获取 KUBERNETES_SERVICE_HOST
和 KUBERNETES_SERVICE_PORT_HTTPS
环境变量为 Kubernetes API 服务器生成一个 HTTPS URL。 API 服务器的集群内地址也发布到 default
命名空间中名为 kubernetes
的 Service 中, 从而 Pod 可以引用 kubernetes.default.svc
作为本地 API 服务器的 DNS 名称。
说明:
Kubernetes 不保证 API 服务器具有主机名 kubernetes.default.svc
的有效证书; 但是,控制平面应该为 $KUBERNETES_SERVICE_HOST
代表的主机名或 IP 地址提供有效证书。
向 API 服务器进行身份认证的推荐做法是使用 服务账号凭据。 默认情况下,每个 Pod 与一个服务账号关联,该服务账号的凭据(令牌)放置在此 Pod 中每个容器的文件系统树中的 /var/run/secrets/kubernetes.io/serviceaccount/token
处。
如果证书包可用,则凭据包被放入每个容器的文件系统树中的 /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
处, 且将被用于验证 API 服务器的服务证书。
最后,用于命名空间域 API 操作的默认命名空间放置在每个容器中的 /var/run/secrets/kubernetes.io/serviceaccount/namespace
文件中。
使用 kubectl proxy
如果你希望不使用官方客户端库就完成 API 查询,可以将 kubectl proxy
作为 command 在 Pod 中启动一个边车(Sidecar)容器。这样,kubectl proxy
自动完成对 API 的身份认证,并将其暴露到 Pod 的 localhost
接口,从而 Pod 中的其他容器可以直接使用 API。
不使用代理
通过将认证令牌直接发送到 API 服务器,也可以避免运行 kubectl proxy 命令。 内部的证书机制能够为连接提供保护。
# 指向内部 API 服务器的主机名
APISERVER=https://kubernetes.default.svc# 服务账号令牌的路径
SERVICEACCOUNT=/var/run/secrets/kubernetes.io/serviceaccount
# 读取 Pod 的名字空间
NAMESPACE=$(cat ${SERVICEACCOUNT}/namespace)
# 读取服务账号的持有者令牌
TOKEN=$(cat ${SERVICEACCOUNT}/token)
# 引用内部证书机构(CA)
CACERT=${SERVICEACCOUNT}/ca.crt
# 使用令牌访问 API
curl --cacert ${CACERT} --header "Authorization: Bearer ${TOKEN}" -X GET ${APISERVER}/api
输出类似于:
{
"kind": "APIVersions",
"versions": ["v1"],
"serverAddressByClientCIDRs": [
{
"clientCIDR": "0.0.0.0/0",
"serverAddress": "10.0.1.149:443"
}
]
}
转自:https://kubernetes.io/zh-cn/docs/tasks/run-application/access-api-from-pod/
kubectl集群内身份验证和命名空间覆盖
默认情况下,kubectl
命令首先确定它是否在 Pod 中运行,从而被视为在集群中运行。 它首先检查 KUBERNETES_SERVICE_HOST
和 KUBERNETES_SERVICE_PORT
环境变量以及 /var/run/secrets/kubernetes.io/serviceaccount/token
中是否存在服务帐户令牌文件。 如果三个条件都被满足,则假定在集群内进行身份验证。
为保持向后兼容性,如果在集群内身份验证期间设置了 POD_NAMESPACE
环境变量,它将覆盖服务帐户令牌中的默认命名空间。 任何依赖默认命名空间的清单或工具都会受到影响。
POD_NAMESPACE
环境变量
如果设置了 POD_NAMESPACE
环境变量,对命名空间资源的 CLI 操作对象将使用该变量值作为默认值。 例如,如果该变量设置为 seattle
,kubectl get pods
将返回 seattle
命名空间中的 Pod。 这是因为 Pod 是一个命名空间资源,且命令中没有提供命名空间。
直接使用 --namespace <value>
会覆盖此行为。
kubectl 如何处理 ServiceAccount 令牌
假设:
- 有 Kubernetes 服务帐户令牌文件挂载在
/var/run/secrets/kubernetes.io/serviceaccount/token
上,并且 - 设置了
KUBERNETES_SERVICE_HOST
环境变量,并且 - 设置了
KUBERNETES_SERVICE_PORT
环境变量,并且 - 你没有在 kubectl 命令行上明确指定命名空间。
然后 kubectl 假定它正在你的集群中运行。 kubectl 工具查找该 ServiceAccount 的命名空间 (该命名空间与 Pod 的命名空间相同)并针对该命名空间进行操作。 这与集群外运行的情况不同; 当 kubectl 在集群外运行并且你没有指定命名空间时, kubectl 命令会针对你在客户端配置中为当前上下文设置的命名空间进行操作。 要为你的 kubectl 更改默认的命名空间,你可以使用以下命令:
kubectl config set-context --current --namespace=<namespace-name>
k8s用ServiceAccount Token的方式访问apiserver
本文介绍了两种访问Kubernetes集群的方法:一是使用私钥证书,通过`curl`命令与apiserver交互;二是利用ServiceAccountToken,包括获取token、解码及使用token进行API调用。详细步骤包括查看ServiceAccount、ClusterRoleBinding以及使用token访问apiserver。
(1)私钥证书访问
在kubernetes集群,可以登陆到master集群,可以使用私钥证书的方式访问。证书路径:master的/etc/kubernetes/pki/(ca.crt / apiserver.crt / apiserver.key) 下面。
# server是apiserver公网访问地址 curl --cacert ca.crt --cert apiserver.crt --key apiserver.key https://$server/api
(2)serviceaccount方式访问
serviceaccount的权限由集群中对应的rolebinding决定,官方文档:
https://kubernetes.io/docs/reference/access-authn-authz/rbac
请选择对应权限的ServiceAccount来获取token,这边选择的是admin ServiceAccount kubectl get sa admin -n kube-system -o yaml 查看对应的clusterrolebinding: kubectl get clusterrolebinding admin -o yaml 查看admin sa绑定的clusterrole和对应的权限。命令: kubectl get clusterrole admin -o yaml 获取对应sa的secret从中获取token。并进行base64解码。 kubectl get secret admin-token-5tctj -n kube-system -o jsonpath={".data.token"} | base64 -d
然后使用该token访问apiserver:
curl -k -H 'Authorization: Bearer token' https://111.111.111.111:6443
示例:
# curl -k -H 'Authorization: Bearer hbGciOiJSUzI1NiIsImtpZCI6Ilg3RHRVOEZZdW0zVmZLV0JZeGlfVjJSTG1TQ1A3LWRPX0w1SUVvdldEWkkifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkZWZhdWx0LXRva2VuLXBycjJsIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImRlZmF1bHQiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiIxN2U3NjAxMi1lYTE5LTRkNDktODM1NS0zMmQ4OGIzY2Y2YWEiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZS1zeXN0ZW06ZGVmYXVsdCJ9.dLNfDTlxoEAMw115yT4NPsOgRcN1rOp9rCZYj9mAzbfKX3L1LNzLlCAYgcBjWdro5u-8NncOyWp9--vAyADq7yaa0T-tBfVALg8dESuwSQpSN-I5YOh7G8ua81HFjWFWX6dvq1GW2fbHPeXCJDlkBnJAbTGLb-487lbK0VWkSdLl1tsT435eZS5e6rRNIWAJJizVBrxDliND_7IXE6zILOR5u-A3z3wk3ngCv4e2FLNOR6z4qr2l-xyQG3pLXH2YQt_TjCkaR9kg57CRQRpwSiN6DfMfeq_qwI7d_iCawNSbLEBWRPEjA3j4juE64CcrA1fr58LIFxEr_ga949XgWw' https://10.182.101.255:6443/api/v1/namespaces # curl -k -H 'Authorization: Bearer hbGciOiJSUzI1NiIsImtpZCI6Ilg3RHRVOEZZdW0zVmZLV0JZeGlfVjJSTG1TQ1A3LWRPX0w1SUVvdldEWkkifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkZWZhdWx0LXRva2VuLXBycjJsIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImRlZmF1bHQiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiIxN2U3NjAxMi1lYTE5LTRkNDktODM1NS0zMmQ4OGIzY2Y2YWEiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZS1zeXN0ZW06ZGVmYXVsdCJ9.dLNfDTlxoEAMw115yT4NPsOgRcN1rOp9rCZYj9mAzbfKX3L1LNzLlCAYgcBjWdro5u-8NncOyWp9--vAyADq7yaa0T-tBfVALg8dESuwSQpSN-I5YOh7G8ua81HFjWFWX6dvq1GW2fbHPeXCJDlkBnJAbTGLb-487lbK0VWkSdLl1tsT435eZS5e6rRNIWAJJizVBrxDliND_7IXE6zILOR5u-A3z3wk3ngCv4e2FLNOR6z4qr2l-xyQG3pLXH2YQt_TjCkaR9kg57CRQRpwSiN6DfMfeq_qwI7d_iCawNSbLEBWRPEjA3j4juE64CcrA1fr58LIFxEr_ga949XgWw' https://10.182.101.255:6443/api { "kind": "APIVersions", "versions": [ "v1" ], "serverAddressByClientCIDRs": [ { "clientCIDR": "0.0.0.0/0", "serverAddress": "172.20.8.14:6443" } ] }
服务器测试
curl -k -H 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6Imc2Vl9OQXBEejdPT3pzUEJGYUdrN0k0SURKNXpxVU9rOXhQQTVobWRhU1EifQ.eyJhdWQiOlsiaHR0cHM6Ly9rdWJlcm5ldGVzLmRlZmF1bHQuc3ZjLmNsdXN0ZXIubG9jYWwiXSwiZXhwIjoxNzY0MTQ0NDU2LCJpYXQiOjE3MzI2MDg0NTYsImlzc yI6Imh0dHBzOi8va3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsIiwia3ViZXJuZXRlcy5pbyI6eyJuYW1lc3BhY2UiOiJkZWZhdWx0IiwicG9kIjp7Im5hbWUiOiJuZ2lueDQiLCJ1aWQiOiJkOWY4ZjM5Ny0xMGFiLTQ4MGItYTY2NS0zM2M0YWJlZTA0YmMifSwic2VydmljZWFjY291bnQiOnsibmFtZSI6ImRlZmF1bHQiLCJ1aWQiOi JiNTdhN2Q5Zi1lZTJiLTQyYTMtYjkwZS04YTU2ZmQyMzE4MDAifSwid2FybmFmdGVyIjoxNzMyNjEyMDYzfSwibmJmIjoxNzMyNjA4NDU2LCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6ZGVmYXVsdDpkZWZhdWx0In0.veHNOYCLzYi7ZCWF9jDSVVDkM7S_ZF4_TRQqc2FClq5TqnByUoRJ-77Mv3Y6FtOvWoKLabFd-3jWPoHxJtuANXD76mYlTjT POijgD4zeuBZ5OaRZduht1nIoYdUhCkA2r_6e0WDxO6MKYGPLeS9F6mlvuwlxFzn2v0j8ldpZpAZGrPPH4tkTCcUGZv4O7HPryA8fRiS3snbXqX7wPEAEXVmcHe4o9wtOT8HqXtKz0ubYk2jXFFFi8kyFmnwrZN1vPLUDLRA4twgvuGL-4HtnOi1yP9K2AsKtyIQWK0D8aWKEMb3e7p3djOd-75UvlD6gEKKDTPxakVTEnmViMQJj1A' https://172.16. 252.1:443/api
curl -k -H 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6Imc2Vl9OQXBEejdPT3pzUEJGYUdrN0k0SURKNXpxVU9rOXhQQTVobWRhU1EifQ.eyJhdWQiOlsiaHR0cHM6Ly9rdWJlcm5ldGVzLmRlZmF1bHQuc3ZjLmNsdXN0ZXIubG9jYWwiXSwiZXhwIjoxNzY0MTQ0NDU2LCJpYXQiOjE3MzI2MDg0NTYsImlzcyI6Imh0dHBzOi8va3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsIiwia3ViZXJuZXRlcy5pbyI6eyJuYW1lc3BhY2UiOiJkZWZhdWx0IiwicG9kIjp7Im5hbWUiOiJuZ2lueDQiLCJ1aWQiOiJkOWY4ZjM5Ny0xMGFiLTQ4MGItYTY2NS0zM2M0YWJlZTA0YmMifSwic2VydmljZWFjY291bnQiOnsibmFtZSI6ImRlZmF1bHQiLCJ1aWQiOiJiNTdhN2Q5Zi1lZTJiLTQyYTMtYjkwZS04YTU2ZmQyMzE4MDAifSwid2FybmFmdGVyIjoxNzMyNjEyMDYzfSwibmJmIjoxNzMyNjA4NDU2LCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6ZGVmYXVsdDpkZWZhdWx0In0.veHNOYCLzYi7ZCWF9jDSVVDkM7S_ZF4_TRQqc2FClq5TqnByUoRJ-77Mv3Y6FtOvWoKLabFd-3jWPoHxJtuANXD76mYlTjTPOijgD4zeuBZ5OaRZduht1nIoYdUhCkA2r_6e0WDxO6MKYGPLeS9F6mlvuwlxFzn2v0j8ldpZpAZGrPPH4tkTCcUGZv4O7HPryA8fRiS3snbXqX7wPEAEXVmcHe4o9wtOT8HqXtKz0ubYk2jXFFFi8kyFmnwrZN1vPLUDLRA4twgvuGL-4HtnOi1yP9K2AsKtyIQWK0D8aWKEMb3e7p3djOd-75UvlD6gEKKDTPxakVTEnmViMQJj1A' https://172.16.252.1:443/apis/authorization.k8s.io/v1/selfsubjectaccessreviews
看到pod默认添加的default账号是没有任何权限的。
下面找一个kube-system下的高权限容器看一下,如oom-guard
# 设置环境变量 export cert=$mydir/ca.crt export token=$mydir/token export namespace=$mydir/namespace kubectl --certificate-authority=$cert --token=$(cat $token) --namespace=$(cat $namespace) --server=https://$apiserver auth can-i --list
./kubectl --certificate-authority=./ca.crt --token='eyJhbGciOiJSUzI1NiIsImtpZCI6Imc2Vl9OQXBEejdPT3pzUEJGYUdrN0k0SURKNXpxVU9rOXhQQTVobWRhU1EifQ.eyJhdWQiOlsiaHR0cHM6Ly9rdWJlcm5ldGVzLmRlZmF1bHQuc3ZjLmNsdXN0ZXIubG9jYWwiXSwiZXhwIjoxNzY0MTU2Nzc3LCJpYXQiOjE3MzI2MjA3NzcsImlzcyI6Imh0dHBzOi8va3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsIiwia3ViZXJuZXRlcy5pbyI6eyJuYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsInBvZCI6eyJuYW1lIjoiY2xzLXByb3Zpc2lvbmVyLTg2NmQ5NTk2YjYteHJiOTgiLCJ1aWQiOiIyNTc3NDc1ZS1lZDRiLTQ3ZDEtYjNjNS0xM2FmYzAxYTg2YjcifSwic2VydmljZWFjY291bnQiOnsibmFtZSI6ImNscy1wcm92aXNpb25lciIsInVpZCI6IjM4ODkwNzQwLTZlMzYtNGIwNS05YWJhLTA3Njc0NmY2OTJlYiJ9LCJ3YXJuYWZ0ZXIiOjE3MzI2MjQzODR9LCJuYmYiOjE3MzI2MjA3NzcsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlLXN5c3RlbTpjbHMtcHJvdmlzaW9uZXIifQ.WeBnvmAsgFaBWQku1AN5W4uTNkiOJaMdCahVXkn-mZwFE5PFSDQwUcJ-xWuWkMiFQRjW0Bz-3Ygj3beh9Q-PwjxxNX8zuuyuQ0hZRHx60Em7_AF4xN42_YH9x5aB58k27FlGe4cMf66FTnFWNW9SMZhO8MLq3VnjvYeyi-KlwE7aK4sUCkL7Qn-_uq2OqX6GCAoMbfu95hDX-5rDrILG2j--GmVteUzr2cgXoLUQcmbNhsIXgHIiTMZrqY-zxn_rn4AuyiZRTLLdO5OnGzhdsvkUM21EvMusJDcyBiF00DLLAal3TCogAk0vCNuK5Chsdn7SyHrqfSAPs86FdshuBQ' --namespace='kube-system' --server=https://43.142.232.xx:443/ auth can-i --list
PS:不知道为什么curl会不成功,但是kubectl可以,后续需要研究下两者的区别:
日志的区别:
{"auditID":"a6104691-5e98-4760-81c6-944c7a874056","requestReceivedTimestamp":"2024-11-26T12:27:33.535178Z","objectRef":{"apiGroup":"authorization.k8s.io","apiVersion":"v1","resource":"selfsubjectaccessreviews"},"level":"Request","kind":"Event","verb":"list","annotations":{"authorization.k8s.io/decision":"forbid","authorization.k8s.io/reason":""},"userAgent":"curl/7.29.0","requestURI":"/apis/authorization.k8s.io/v1/selfsubjectaccessreviews","responseStatus":{"reason":"Forbidden","metadata":"{}","code":403,"details":"{\"group\":\"authorization.k8s.io\",\"kind\":\"selfsubjectaccessreviews\"}","message":"selfsubjectaccessreviews.authorization.k8s.io is forbidden: User \"system:serviceaccount:kube-system:cls-provisioner\" cannot list resource \"selfsubjectaccessreviews\" in API group \"authorization.k8s.io\" at the cluster scope","status":"Failure"},"__TAG__":{"clusterId":"cls-o5h4fivr"},"stageTimestamp":"2024-11-26T12:27:33.536191Z","sourceIPs":"[\"172.16.1.65\",\"10.0.0.4\"]","apiVersion":"audit.k8s.io/v1","stage":"ResponseComplete","user":{"uid":"38890740-6e36-4b05-9aba-076746f692eb","extra":"{\"authentication.kubernetes.io/pod-name\":[\"cls-provisioner-866d9596b6-xrb98\"],\"authentication.kubernetes.io/pod-uid\":[\"2577475e-ed4b-47d1-b3c5-13afc01a86b7\"]}","groups":"[\"system:serviceaccounts\",\"system:serviceaccounts:kube-system\",\"system:authenticated\"]","username":"system:serviceaccount:kube-system:cls-provisioner"},"__SOURCE__":"10.0.0.12","__FILENAME__":"/rootfs/etc/kubernetes/kubernetes.audit","__HOSTNAME__":"10-0-0-12"} {"auditID":"57e8c1d0-73b8-4085-aa40-8d2b04d62398","requestReceivedTimestamp":"2024-11-26T12:29:14.824203Z","objectRef":{"apiGroup":"authorization.k8s.io","apiVersion":"v1","resource":"selfsubjectrulesreviews"},"level":"RequestResponse","kind":"Event","verb":"create","annotations":{"authorization.k8s.io/decision":"allow","authorization.k8s.io/reason":"RBAC: allowed by ClusterRoleBinding \"system:basic-user\" of ClusterRole \"system:basic-user\" to Group \"system:authenticated\""},"userAgent":"kubectl/v1.31.0 (linux/amd64) kubernetes/9edcffc","requestURI":"/apis/authorization.k8s.io/v1/selfsubjectrulesreviews","responseStatus":{"metadata":"{}","code":201},"__TAG__":{"clusterId":"cls-o5h4fivr"},"stageTimestamp":"2024-11-26T12:29:14.825685Z","responseObject":"{\"kind\":\"SelfSubjectRulesReview\",\"apiVersion\":\"authorization.k8s.io/v1\",\"metadata\":{\"creationTimestamp\":null},\"spec\":{},\"status\":{\"resourceRules\":[{\"verbs\":[\"list\",\"get\",\"watch\",\"patch\",\"update\"],\"apiGroups\":[\"cls.cloud.tencent.com\"],\"resources\":[\"logconfigs\",\"logconfigpros\"]},{\"verbs\":[\"create\",\"patch\",\"update\"],\"apiGroups\":[\"*\"],\"resources\":[\"events\"]},{\"verbs\":[\"create\"],\"apiGroups\":[\"authorization.k8s.io\"],\"resources\":[\"selfsubjectaccessreviews\",\"selfsubjectrulesreviews\"]},{\"verbs\":[\"create\"],\"apiGroups\":[\"authentication.k8s.io\"],\"resources\":[\"selfsubjectreviews\"]}],\"nonResourceRules\":[{\"verbs\":[\"get\"],\"nonResourceURLs\":[\"/healthz\",\"/livez\",\"/readyz\",\"/version\",\"/version/\"]},{\"verbs\":[\"get\"],\"nonResourceURLs\":[\"/.well-known/openid-configuration\",\"/.well-known/openid-configuration/\",\"/openid/v1/jwks\",\"/openid/v1/jwks/\"]},{\"verbs\":[\"get\"],\"nonResourceURLs\":[\"/api\",\"/api/*\",\"/apis\",\"/apis/*\",\"/healthz\",\"/livez\",\"/openapi\",\"/openapi/*\",\"/readyz\",\"/version\",\"/version/\"]}],\"incomplete\":false}}","sourceIPs":"[\"172.16.1.65\",\"10.0.0.4\"]","apiVersion":"audit.k8s.io/v1","stage":"ResponseComplete","requestObject":"{\"kind\":\"SelfSubjectRulesReview\",\"apiVersion\":\"authorization.k8s.io/v1\",\"metadata\":{\"creationTimestamp\":null},\"spec\":{\"namespace\":\"default\"},\"status\":{\"resourceRules\":null,\"nonResourceRules\":null,\"incomplete\":false}}","user":{"uid":"38890740-6e36-4b05-9aba-076746f692eb","extra":"{\"authentication.kubernetes.io/pod-name\":[\"cls-provisioner-866d9596b6-xrb98\"],\"authentication.kubernetes.io/pod-uid\":[\"2577475e-ed4b-47d1-b3c5-13afc01a86b7\"]}","groups":"[\"system:serviceaccounts\",\"system:serviceaccounts:kube-system\",\"system:authenticated\"]","username":"system:serviceaccount:kube-system:cls-provisioner"},"__SOURCE__":"10.0.0.3","__FILENAME__":"/rootfs/etc/kubernetes/kubernetes.audit","__HOSTNAME__":"10-0-0-3"}
ps:这个是管理员的权限信息:https://console.cloud.tencent.com/tke2/cluster/sub/detail/rbac/clusterRole?rid=4&clusterId=cls-o5h4fivr&resourceIns=kube-admin
转载请注明:jinglingshu的博客 » 从Pod中访问Kubernetes API