Microsoft MVP성태의 닷넷 이야기
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 
(연관된 글이 5개 있습니다.)
(시리즈 글이 2개 있습니다.)
개발 환경 구성: 552. Kubernetes - kube-apiserver와 REST API 통신하는 방법 (Docker Desktop for Windows 환경)
; https://www.sysnet.pe.kr/2/0/12566

.NET Framework: 1035. C# - kubectl 명령어 또는 REST API 대신 Kubernetes 클라이언트 라이브러리를 통해 프로그래밍으로 접근
; https://www.sysnet.pe.kr/2/0/12594




Kubernetes - kube-apiserver와 REST API 통신하는 방법 (Docker Desktop for Windows 환경)

k8s의 apiserver 주소는 다양하게 구할 수 있습니다.

c:\temp> kubectl config view
apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: DATA+OMITTED
    server: https://kubernetes.docker.internal:6443
  name: docker-desktop
contexts:
- context:
    cluster: docker-desktop
    user: docker-desktop
  name: docker-desktop
current-context: docker-desktop
kind: Config
preferences: {}
users:
- name: docker-desktop
  user:
    client-certificate-data: REDACTED
    client-key-data: REDACTED

c:\temp> kubectl cluster-info
Kubernetes master is running at https://kubernetes.docker.internal:6443
Heapster is running at https://kubernetes.docker.internal:6443/api/v1/namespaces/kube-system/services/heapster/proxy
KubeDNS is running at https://kubernetes.docker.internal:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
monitoring-grafana is running at https://kubernetes.docker.internal:6443/api/v1/namespaces/kube-system/services/monitoring-grafana/proxy
monitoring-influxdb is running at https://kubernetes.docker.internal:6443/api/v1/namespaces/kube-system/services/monitoring-influxdb/proxy

참고로, Docker Desktop for Windows의 경우 C:\Windows\system32\drivers\etc\HOSTS 파일에 kubernetes.docker.internal 이름을 다음과 같이 등록해 두고 있습니다.

127.0.0.1 kubernetes.docker.internal

그리고, 별다른 인증 정보를 제공하지 않는다면 기본적으로는 API 사용이 불가능합니다.

// curl https://localhost:6443/api/ --insecure
c:\temp> curl https://kubernetes.docker.internal:6443/api/ --insecure
{
  "kind": "Status",
  "apiVersion": "v1",
  "metadata": {

  },
  "status": "Failure",
  "message": "forbidden: User \"system:anonymous\" cannot get path \"/api/\"",
  "reason": "Forbidden",
  "details": {

  },
  "code": 403
}

재미있는 것은, 해당 인증 정보를 알고 있는 응용 프로그램이 있는데 그것이 바로 kubectl입니다. 즉, kubectl은 내부적으로 (연결 정보를 담고 있는 %USERPROFILE%\.kube\config 파일을 이용해) kube-apiserver와 자유롭게 통신할 수 있습니다. 물론, 외부에서도 kubectl이 하듯이 인증 정보를 제공하면 kube-apiserver와 통신을 할 수 있습니다.

단지, k8s는 그렇게 하지 않고도 외부 프로그램이 kubectl을 경유해 kube-apiserver와 통신하는 방법을 제공하는데,

Kubernetes Documentation / Tasks / Access Applications in a Cluster / Accessing Clusters
 - Directly accessing the REST API
; https://kubernetes.io/docs/tasks/access-application-cluster/access-cluster/#directly-accessing-the-rest-api

이를 위해 kubectl을 proxy 모드로 실행할 수 있습니다.

c:\temp> kubectl proxy
Starting to serve on 127.0.0.1:8001

위와 같이 proxy가 실행 중이면, 이제 우리는 그 프락시 서버로 요청을 날릴 수 있고, kubectl은 그 요청을 받아 적절한 인증 정보와 함께 kube-apiserver에 전달해 그 결과를 반환해 줍니다.

c:\temp> curl http://127.0.0.1:8001/api/
{
  "kind": "APIVersions",
  "versions": [
    "v1"
  ],
  "serverAddressByClientCIDRs": [
    {
      "clientCIDR": "0.0.0.0/0",
      "serverAddress": "192.168.65.3:6443"
    }
  ]
}




물론, kubectl을 경유하지 않고 인증 정보를 직접 제공하는 것도 가능합니다. 그러려면 service account token 값을 알아야 하는데요, 다음과 같은 절차를 거쳐 값을 구하는 것이 가능합니다.

c:\temp> kubectl get secrets
NAME                  TYPE                                  DATA   AGE
default-token-qnwbl   kubernetes.io/service-account-token   3      50d

c:\temp> kubectl describe secret default-token-qnwbl
Name:         default-token-qnwbl
Namespace:    default
Labels:       <none>
Annotations:  kubernetes.io/service-account.name: default
              kubernetes.io/service-account.uid: 6a8f5d0c-db54-4018-b060-f311583546c0

Type:  kubernetes.io/service-account-token

Data
====
namespace:  7 bytes
token:      eyJhbGciOiJSUzI...[생략]...lzn1lGmAh1w
ca.crt:     1025 bytes

이후 token을 REST API 요청의 Authorization 헤더로 함께 보내면 끝!

c:\temp> curl https://localhost:6443/api/ --insecure --header "Authorization: Bearer eyJhbGciOiJSUzI...[생략]...lzn1lGmAh1w"
{
  "kind": "APIVersions",
  "versions": [
    "v1"
  ],
  "serverAddressByClientCIDRs": [
    {
      "clientCIDR": "0.0.0.0/0",
      "serverAddress": "192.168.65.3:6443"
    }
  ]
}




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]

[연관 글]






[최초 등록일: ]
[최종 수정일: 3/24/2021]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 




... 151  152  153  154  155  156  157  158  159  160  161  [162]  163  164  165  ...
NoWriterDateCnt.TitleFile(s)
999정성태2/28/201146583개발 환경 구성: 108. RemoteFX - Windows 7 가상 머신에서 DirectX 9c 환경을 제공 [5]
998정성태2/27/201120282Team Foundation Server: 42. TFS Application-Tier만 재설치
996정성태2/12/201137731디버깅 기술: 35. windbg - 분석 예: 시작하자마자 비정상 종료하는 프로세스 - NullReferenceException
995정성태2/11/201156258.NET Framework: 205. 코드(C#)를 통한 풀 덤프 만드는 방법 [4]
994정성태2/10/201136211디버깅 기술: 34. Windbg - ERROR: Unable to load DLL mscordacwks_x86_x86_2.0.50727.4200.dll, Win32 error 0n2 [1]
993정성태2/10/201128520개발 환경 구성: 107. 하나의 WPF 프로젝트를 WinExe / Library로 빌드하는 방법
992정성태10/15/201129375개발 환경 구성: 106. VSS(Volume Shadow Service)를 이용한 Hyper-V VM 백업/복원 [2]
991정성태2/6/201148851개발 환경 구성: 105. 풀 덤프 파일을 남기는 방법 [4]
990정성태2/2/201134003개발 환경 구성: 104. Visual C++ Custom Build Tool 사용예 [1]파일 다운로드1
989정성태2/1/201130514개발 환경 구성: 103. DOS batch - 동기 방식으로 원격 서비스 제어
988정성태1/30/201126698개발 환경 구성: 102. MSBuild - DefineConstants에 다중 전처리 값 설정
987정성태1/29/201139859디버깅 기술: 33. PDB Symbol 로드 오류 - Cannot find or open the PDB file. [2]
986정성태1/26/201131296.NET Framework: 204. 분리된 ThreadPool 사용 - Smart Thread Pool
985정성태1/25/201127945디버깅 기술: 32. 인증서로 서명된 닷넷 어셈블리의 실행 지연 현상
984정성태1/25/201122657개발 환경 구성: 101. SharePoint 2010 - Form Design
983정성태1/23/201127705제니퍼 .NET: 15. 눈으로 확인하는 maxWorkerThreads, minFreeThreads 설정값 [1]
982정성태1/22/201125006개발 환경 구성: 100. SharePoint 2010 - iPad 친화적인 게시판 만들기 (사용자 지정 목록) [1]
981정성태1/19/201120885개발 환경 구성: 99. SharePoint 2010 - 웹 애플리케이션 생성 시 고려해야 할 점. [1]
980정성태1/19/201132359개발 환경 구성: 98. SharePoint 2010 - Office Web Apps 설치
979정성태1/18/201125005개발 환경 구성: 97. SharePoint 2010 팀 사이트 구성
978정성태1/16/201131971.NET Framework: 203. VPN 자동 연결 및 Router 설정 추가
977정성태1/12/201131305개발 환경 구성: 96. SharePoint 2010 설치 [5]
976정성태1/11/201153947오류 유형: 111. IIS - 500.19 오류 (0x8007000d)
975정성태1/10/201128196.NET Framework: 202. CLR JIT 컴파일러가 생성한 기계어 코드 확인하는 방법 [3]파일 다운로드1
974정성태1/8/201126978.NET Framework: 201. 윈폼 TreeView - Bold 폰트 설정 후 텍스트가 잘리는 문제 [1]파일 다운로드1
973정성태1/7/201126316.NET Framework: 200. IIS Metabase와 ServerManager 개체 활용파일 다운로드1
... 151  152  153  154  155  156  157  158  159  160  161  [162]  163  164  165  ...