ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Kubernetes API 사용 테스트
    HOWTO 2022. 3. 25. 16:03

    요즘 kubernetes cluster 는 대부분 CSP에서 제공하는 managed kubernetes 를 사용하기 때문에, cluster 를 생성하고 워커노드를 추가/변경하기 위한 API 는 CSP 에서 제공하지만, pod 나 deployment 를 생성/관리하기 위해서는 kubernetes 자체에서 제공하는 api 를 사용해야 한다. 

     

     

     

     

    api 테스트를 하기 위해 먼저 jane 이라는 service account 가 nsistio 의 namespace 에 있는 pod 만 조회할 수 있는 role 을 생성하고 binding 해준다. 

     

    1. service account 생성 

    kubectl create sa jane -n nsistio

    2. role 생성

    kind: Role
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: custom-role
      namespace: nsistio
    rules:
      - apiGroups: [""] # "" indicates the core API group
        resources: ["pods"]
        verbs: ["get", "watch", "list"]
    kubectl create -f role.yaml

     

    2. role binding 

    kind: RoleBinding
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: custom-rolebinding
      namespace: nsistio
    subjects:
      - kind: ServiceAccount
        name: jane
        namespace: nsistio
    roleRef:
      kind: Role
      name: custom-role
      apiGroup: rbac.authorization.k8s.io
    kubectl create -f rolebinding.yaml

     

    3. pod list 조회 권한이 있는지 확인 - yes 라고 나와야 함 

    kubectl auth can-i list pods --as=system:serviceaccount:nsistio:jane -n nsistio
    yes

     

    4. api 테스트 준비

     1) api 서버 확인 

    kubectl config view -o jsonpath='{"Cluster name\tServer\n"}{range .clusters[*]}{.name}{"\t"}{.cluster.server}{"\n"}{end}'

    2) service account jane의 token 확인

    NAMESPACE=nsistio
    SA=jane
    TOKEN=$(kubectl -n $NAMESPACE describe secret $(kubectl get -n $NAMESPACE secrets | grep $SA | cut -f1 -d ' ') | grep -E '^token' | cut -f2 -d':' | tr -d ' ')

     

    5. pod list api 실행

    curl -X GET $APISERVER/api/v1/namespaces/$NAMESPACE/pods/ -H "Authorization: Bearer $TOKEN" --insecure | more
    
      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
      0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0{
      "kind": "PodList",
      "apiVersion": "v1",
      "metadata": {
        "selfLink": "/api/v1/namespaces/nsistio/pods/",
        "resourceVersion": "138741515"
      },
      "items": [
        {
          "metadata": {
            "name": "details-v1-66b6955995-5cqzs",
            "generateName": "details-v1-66b6955995-",
            "namespace": "nsistio",
            "selfLink": "/api/v1/namespaces/nsistio/pods/details-v1-66b6955995-5cqzs",
            "uid": "feee7176-6290-4017-8462-5cc4924c92a7",
            "resourceVersion": "30226063",
            "creationTimestamp": "2021-09-01T12:52:55Z",
            "labels": {
              "app": "details",
              "istio.io/rev": "default",
              "pod-template-hash": "66b6955995",
              "security.istio.io/tlsMode": "istio",
              "service.istio.io/canonical-name": "details",
              "service.istio.io/canonical-revision": "v1",
              "version": "v1"
            },
            "annotations": {
              "kubectl.kubernetes.io/default-container": "details",
              "kubectl.kubernetes.io/default-logs-container": "details",
              "prometheus.io/path": "/stats/prometheus",
              "prometheus.io/port": "15020",
              "prometheus.io/scrape": "true",
              "sidecar.istio.io/status": "{\"initContainers\":[\"istio-init\"],\"containers\":[\"istio-proxy\"],\"volumes\":[\"istio-envoy\",\"istio-data\",\"istio-podinfo\",\"istiod-ca-cert\"],\"imagePullSecrets\":null}"
            },
            "ownerReferences": [
              {
                "apiVersion": "apps/v1",
                "kind": "ReplicaSet",
                "name": "details-v1-66b6955995",
                "uid": "70ab0e5b-0f1d-45f9-a29c-f981331f1d7c",
                "controller": true,
                "blockOwnerDeletion": true
              }

    * kubernetes api reference 

    https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.19/#podstatus-v1-core

    반응형

    댓글

Designed by Tistory.