• 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
  • 相关阅读:
    如何自己录制教学视频?零基础也能上手
    cartographer中的扫描匹配
    MyBatis获取参数值的两种方式,MyBatis获取参数值的情况(5种)
    防御XSS攻击的方法
    01_Webpack
    LeetCode题练习与总结:统计词频--192
    一文学会JavaScript
    C# 转义字符
    uniapp运行到IOS真机提示 错误:请查看是否设备未加入到证书列表或者确认证书类型是否匹配
    Docker设置开启远程访问
  • 原文地址:https://blog.csdn.net/yuezhilangniao/article/details/138179653