k8s日常动手实践 ~~ pod访问 pod请求 k8s api ~ 含新版带curl的busybox镜像

前言:

可以使用 Kubernetes API 获取集群信息。使用 Service Account(SA)进行身份验证,可以以安全的方式访问 Kubernetes API,而无需在 Pod 中使用明文凭据。

以下是一个使用 Service Account 访问 Kubernetes API 获取集群信息的示例:

整体步骤

以下是一个使用 Service Account 访问 Kubernetes API 获取集群信息的示例:

1 创建一个名为 "my-sa" 的 Service Account:
bash 复制代码
 kubectl create serviceaccount my-sa  
2. 创建一个名为 "my-role" 的 Role,并授予访问 "pods" 和 "nodes" 资源的权限:

cat <<EOF | kubectl apply -f -

kind: Role

apiVersion: rbac.authorization.k8s.io/v1

metadata:

name: my-role

rules:

  • apiGroups: [""]
    resources: ["pods", "nodes"]
    verbs: ["get", "list", "watch"]
    EOF

上面命令好像没有结尾 2-role的 yaml如下

yaml 复制代码
kind: Role  
apiVersion: rbac.authorization.k8s.io/v1  
metadata:  
  name: my-role  
rules:  
- apiGroups: [""]  
  resources: ["pods", "nodes"]  
  verbs: ["get", "list", "watch"]  
3. 将 "my-role" Role 绑定到 "my-sa" Service Account:
bash 复制代码
kubectl create rolebinding my-role-binding --role=my-role --serviceaccount=default:my-sa  
 
4. 在 Pod 中使用 "my-sa" Service Account 访问 Kubernetes API:
yaml 复制代码
apiVersion: v1  
kind: Pod  
metadata:  
  name: my-pod  
spec:  
  serviceAccountName: my-sa  
  containers:  
  - name: my-container  
    image: yauritux/busybox-curl # curlimages/curl gep推荐镜像 curl版本较高
    command: ["sh", "-c", "while true; do sleep 3600; done"]  
5. 进入 Pod 中,并使用 curl 命令访问 Kubernetes API 获取集群信息:

kubectl exec -it my-pod -- sh

TOKEN=$(cat /var/run/secrets/kubernetes.io/serviceaccount/token)

#curl -H "Authorization: Bearer $TOKEN" https://kubernetes.default.svc/api/v1/nodes

推荐跳过认证 不然会报证书错误 curl: (35) error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version

curl -k -H "Authorization: Bearer $TOKEN" https://kubernetes.default.svc/api/v1/nodes

在上述示例中,我们创建了一个名为 "my-sa" 的 Service Account,并使用 Role 和 RoleBinding 为其授予了访问 "pods" 和 "nodes" 资源的权限。然后,在 Pod 中使用 "my-sa" Service Account 访问 Kubernetes API,使用 curl 命令获取集群中的节点信息。

最后虽然报错,但是还是一次不错的实践

powershell 复制代码
{
  "kind": "Status",
  "apiVersion": "v1",
  "metadata": {},
  "status": "Failure",
  "message": "nodes is forbidden: User \"system:serviceaccount:default:my-sa\" cannot list resource \"nodes\" in API group \"\" at the cluster scope",
  "reason": "Forbidden",
  "details": {
    "kind": "nodes"
  },
  "code": 403
相关推荐
全能全知者8 分钟前
docker快速安装与配置mongoDB
mongodb·docker·容器
为什么这亚子2 小时前
九、Go语言快速入门之map
运维·开发语言·后端·算法·云原生·golang·云计算
ZHOU西口4 小时前
微服务实战系列之玩转Docker(十八)
分布式·docker·云原生·架构·数据安全·etcd·rbac
牛角上的男孩4 小时前
Istio Gateway发布服务
云原生·gateway·istio
JuiceFS5 小时前
好未来:多云环境下基于 JuiceFS 建设低运维模型仓库
运维·云原生
景天科技苑6 小时前
【云原生开发】K8S多集群资源管理平台架构设计
云原生·容器·kubernetes·k8s·云原生开发·k8s管理系统
wclass-zhengge7 小时前
K8S篇(基本介绍)
云原生·容器·kubernetes
颜淡慕潇7 小时前
【K8S问题系列 |1 】Kubernetes 中 NodePort 类型的 Service 无法访问【已解决】
后端·云原生·容器·kubernetes·问题解决
川石课堂软件测试9 小时前
性能测试|docker容器下搭建JMeter+Grafana+Influxdb监控可视化平台
运维·javascript·深度学习·jmeter·docker·容器·grafana
昌sit!15 小时前
K8S node节点没有相应的pod镜像运行故障处理办法
云原生·容器·kubernetes