• 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:
     kubectl create serviceaccount my-sa  
    
    • 1
    2. 创建一个名为 “my-role” 的 Role,并授予访问 “pods” 和 “nodes” 资源的权限:

    cat < 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如下

    kind: Role  
    apiVersion: rbac.authorization.k8s.io/v1  
    metadata:  
      name: my-role  
    rules:  
    - apiGroups: [""]  
      resources: ["pods", "nodes"]  
      verbs: ["get", "list", "watch"]  
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    3. 将 “my-role” Role 绑定到 “my-sa” Service Account:
    kubectl create rolebinding my-role-binding --role=my-role --serviceaccount=default:my-sa  
     
    
    • 1
    • 2
    4. 在 Pod 中使用 “my-sa” Service Account 访问 Kubernetes API:
    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"]  
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    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 命令获取集群中的节点信息。

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

    {
      "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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
  • 相关阅读:
    【YAML】【YAML的实践】【YAML的使用学习记录】
    Jupyter Notebook修改默认浏览器方法
    【Lilishop商城】No2-3.确定软件架构搭建二(本篇包括接口规范、日志处理)
    uniapp同步将本地图片转换为base64,支持微信、H5、APP
    Makefile中的变量
    C#基础语法--运算符
    研究报告:周界警戒AI算法+视频智能分析在安全生产场景中的应用
    6--OpenCV:基础交互
    面向6G的欠采样相移键控可见光调制方案
    windows batch文件中 ffmpeg 的部分小坑
  • 原文地址:https://blog.csdn.net/yuezhilangniao/article/details/138179653