OpenShift容器中读取Project信息

背景

在日常运维管理中,经常需要获取OpenShift集群资源的信息,甚至创建、编辑或删除资源。我们都很清楚,使用oc命令就能够非常方便地完成这些操作。但是有时,我们希望通过调用接口来实现,以便于与其它组件或者应用进行集成。那么我们该如何做呢?本篇就以读取Project信息为例,展示如何通过HTTP请求操作OpenShift的资源。

操作

  1. 首先需要创建具有读取Project信息权限的clusterrole project_view
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $ cat <<EOF | oc create -f -
    apiVersion: authorization.openshift.io/v1
    kind: ClusterRole
    metadata:
    name: project_view
    rules:
    - apiGroups:
    - project.openshift.io
    resources:
    - projects
    verbs:
    - get
    EOF
  2. 为需要调用的应用POD添加获取Project信息的权限
    1
    $ oc adm policy add-cluster-role-to-user project_view -z default
    为所有应用授予获取Project信息的权限
    1
    $ oc adm policy add-cluster-role-to-group project_view system:serviceaccounts
  3. 通过发送serviceaccount认证信息,应用Pod实例中便可通过HTTP请求获取Project信息
    1
    2
    3
    4
    $ TOKEN=$(cat /run/secrets/kubernetes.io/serviceaccount/token)
    $ CACERT=/run/secrets/kubernetes.io/serviceaccount/ca.crt
    $ PROJECT_OBJ=$(curl -s -H "Authorization: bearer $TOKEN") --caert $CACERT https://openshift.default.svc/api/project.openshift.io/v1/projects/$NAMESPACE)
    $ PROJEXT_UUID=$(echo $PROJECT_OJB | jq --raw-output .metadata.uid)
  4. 完成