window에서 리눅스에 설치된 클러스터를 접근하고 싶다.
따라서, window에서 외부 클러스터를 연결 및 접근하는 방법을 서술한다.
1. kubectl 설치
https://kubernetes.io/ko/docs/tasks/tools/install-kubectl-windows/
윈도우에 kubectl 설치 및 설정
시작하기 전에 클러스터의 마이너(minor) 버전 차이 내에 있는 kubectl 버전을 사용해야 한다. 예를 들어, v1.32 클라이언트는 v1.31, v1.32, v1.33의 컨트롤 플레인과 연동될 수 있다. 호환되는 최신 버전
kubernetes.io
해당 링크에서 k8s 클러스터 버전과 동일한 kubectl 를 설치한다.
2. 계정 생성 및 클러스터 롤 부여.
kubectl create secret generic dev-junghoon-secret --from-literal=token=$(openssl rand -base64 32) -n default
apiVersion: v1
kind: ServiceAccount
metadata:
name: dev-junghoon
namespace: default
secrets:
- name: dev-junghoon-secret
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: dev-junghoon-role
rules:
- apiGroups: ["*"]
resources: ["*"]
verbs: ["*"]
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: dev-junghoon-role-binding
subjects:
- kind: User
name: dev-junghoon
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: ClusterRole
name: dev-junghoon-role
apiGroup: rbac.authorization.k8s.io
파일 적용 이후
3. 인증서 설정 및 .kube/config 수정
아래 단계 수행
1) Secret 이름 확인:
kubectl get sa dev-junghoon -o jsonpath='{.secrets[0].name}'
2) 스크릿 정보 추출
2-1) ca 인증서
kubectl get secret $(kubectl get sa dev-junghoon -o jsonpath='{.secrets[0].name}') -o jsonpath='{.data.ca\.crt}' | base64 -d > ca.crt
2-2) 토큰
kubectl get secret $(kubectl get sa dev-junghoon -o jsonpath='{.secrets[0].name}') -o jsonpath='{.data.token}' | base64 -d > token.txt
3) 인증서
3-1) 개인 키 생성
openssl genrsa -out dev-junghoon.key 2048
3-2) CSR 생성
openssl req -new -key dev-junghoon.key -out dev-junghoon.csr -subj "/CN=dev-junghoon/O=dev-group"
3-3) 클러스터 CA로 서명
openssl x509 -req -in dev-junghoon.csr -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -CAcreateserial -out dev-junghoon.crt -days 3650
(보통 CA 인증서는 /etc/kubernetes/pki 에 있다.)
3-4) 결과 파일
dev-junghoon.crt: 클라이언트 인증서.
dev-junghoon.key: 개인 키.
4) C:\Users\<username>\.kube\config 파일에 설정
토큰 기반 예시:
apiVersion: v1
kind: Config
clusters:
- cluster:
certificate-authority: C:/Users/<username>/k8s-cert/ca.crt
server: https://<master-node-ip>:6443
name: external-cluster
contexts:
- context:
cluster: external-cluster
user: dev-junghoon
name: external-cluster-dev-junghoon
current-context: external-cluster-dev-junghoon
users:
- name: dev-junghoon
user:
token: <paste-token-from-token.txt>
인증서 기반 예시:
yaml
apiVersion: v1
kind: Config
clusters:
- cluster:
certificate-authority: C:/Users/<username>/k8s-cert/ca.crt
server: https://<master-node-ip>:6443
name: external-cluster
contexts:
- context:
cluster: external-cluster
user: dev-junghoon
name: external-cluster-dev-junghoon
current-context: external-cluster-dev-junghoon
users:
- name: dev-junghoon
user:
client-certificate: C:/Users/<username>/k8s-cert/dev-junghoon.crt
client-key: C:/Users/<username>/k8s-cert/dev-junghoon.key
권한 테스트
kubectl auth can-i list nodes --as=dev-junghoon
no 가 나오면 설정이 잘못되었음.
'K8S' 카테고리의 다른 글
| [K8S] 쿠버네티스 컴포넌트 (1) | 2025.07.27 |
|---|---|
| [K8S] Minikube로 kubernetes 환경 셋업 (1) | 2025.07.27 |
| [k8s] 멀티 컨테이너 (0) | 2025.04.13 |
| Kubernetes API 사용해서 Deployment 정보 수정하기 (0) | 2025.03.17 |
| [k8s] 네트워크 (0) | 2025.02.15 |