k8s API 통신 방법

김동영·2024년 9월 22일
1

외부에서 k8s Api 를 통신할 때 아래와 같이 사용 가능

UML

k8s 리소스 UML

호출 방법

1. 관련 리소스 생성

apiVersion: v1
kind: ServiceAccount
metadata:
  name: api-token-account
  namespace: default

---
apiVersion: v1
kind: Secret
type: kubernetes.10/service-account-token
metadata:
  name: api-token-secret
  namespace: default
  annotations:
    kubernetes.io/service-account.name: "api-token-account"

---
apiVersion: v1
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: api-token-cluster-role
rules:
- apiGroups:
  - "" # core
  - apps
  resources: 
    - namespaces
    - replicasets
  verbs: ["list"]

---
apiVersion: v1
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: api-token-cluster-role-binding
subjects:
- kind: ServiceAccount
  name: api-token-account
  namespace: default
- kind: User
  name: api-token-user
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: api-token-cluster-role
  apiGroup: rbac.authorization.k8s.io

2. 토큰 생성

$ TOKEN=$(kubectl create token api-token-account)

3. Api 호출

$ curl -X GET https://localhost:6443/api/v1/namespaces --header "Authorization: Bearer $TOKEN" --insecure
  • 참고) insecure 옵션 사용 이유
    1. k8s 기본 설치 시, api 통신은 https 만 지원함.
    2. 이 때, 자체 발행되는 인증서는 공식이 아니기 때문에 검증할 수 없음.(추가 설정이 필요함)
    3. API 통신 자체가 목적이기 때문에 인증서 유효성 검증을 무시하기 위해 위 옵션을 추가함.
profile
k8s, 프레임워크와 함께하는 백엔드 개발자입니다.

1개의 댓글

comment-user-thumbnail
2024년 9월 22일

Plant UML 코드

@startuml

class "ServiceAccount" as sa {
  클러스터 전역에 적용되는 리소스
}

class "Role" as role {
  특정 네임스페이스 규칙 설정용 리소스
  * 네임스페이스에 종속됨.(네임스페이스 별 이름 중복 가능)
}

class "ClusterRole" as clusterrole {
  클러스터 전체 규칙 설정용 리소스
  * 네임스페이스 종속 불가(클러스터 전역에 이름 중복 불가)
}

class "RoleBinding" as rolebinding {
  롤과 유저/서비스어카운트 연결
  * User Type 존재
  * ApiGroup 중 core 는 "" 로 표기
}

class "ClusterRoleBinding" as clusterrolebinding {
  클러스터롤과 유저/서비스어카운트 연결
  * User Type 존재
  * ApiGroup 중 core 는 "" 로 표기
}

sa <. clusterrolebinding
clusterrolebinding .> clusterrole

sa <.. rolebinding
rolebinding .> role

@enduml
답글 달기