[NCloud] NCP Demo.4 정리 [ ncp-iam-authenticator 설치 / 쿠버네티스 클러스터 생성 및 단일 pod, deployment 활용, 로드밸런서 생성]
Nowhere 와 Now here 의 차이

IT/Cloud

[NCloud] NCP Demo.4 정리 [ ncp-iam-authenticator 설치 / 쿠버네티스 클러스터 생성 및 단일 pod, deployment 활용, 로드밸런서 생성]

TIENE 2023. 8. 24. 11:53
반응형

- Kubernetes 이미지까지 정상적으로 올라왔다.

 

- 그런데, 당황한 것은 설정 파일에서 다운로드 탭이 있어야하는데 IAM 인증가이드라는 것이 있었다.

- 방식을 IAM 인증으로 변경한 것 같다..

- 그래서, ncp-iam-authenticator를 설치하기 위해, IAM 인증 가이드에서 설치했다. 설치는 복붙만 하면 무난하게 진행되었다.

https://guide.ncloud-docs.com/docs/k8s-iam-auth-ncp-iam-authenticator

 

ncp-iam-authenticator 설치

 

guide.ncloud-docs.com

 

IAM 인증 kubeconfig 생성/업데이트 로 넘어가서 API 인증키값을 설정해야했다. 여기서 꽤나 고전을 면치 못해서 삽질을 꽤나 했다..

 

- OS 환경변수 설정에는 자신의 ACCESS_KEY / SECRET_KEY 값을 입력해야한다. 

 

- 그리고, Login 한 사용자 계정의 홈 디렉토리에 .ncloud라는 디렉토리를 만들고, configure 파일을 생성한다.

 

more configure
[DEFAULT]
ncloud_access_key_id = LjF
ncloud_secret_access_key = XpU
ncloud_api_url = https://ncloud.apigw.ntruss.com

[project]
ncloud_access_key_id = LjF
ncloud_secret_access_key = XpU
ncloud_api_url = https://ncloud.apigw.ntruss.com

ncp-iam-authenticator update-kubeconfig --region KR --clusterUuid f33ef9f4-e42c-43bc-b014-1382f643c935

- 클러스터 이름(UUID)와 지역을 지정하여, kubeconfig 파일에 클러스터 인증 Config를 업데이트한다.

 IAM(Identity and Access Management) 인증이 활성화된 Kubernetes 클러스터의 kubeconfig 파일을 업데이트하기 위해 'ncp-iam-authenticator' 도구를 호출한다. 이는 '--region KR' 매개 변수를 기반으로 한국의 네이버 클라우드 플랫폼(NCP)에서 사용한다.

ncp-iam-authenticator
- 네이버 클라우드 플랫폼이 Kubernetes 클러스터와의 IAM 기반 인증을 위해 제공하는 맞춤형 명령줄 도구

update-kubeconfig
- 이 명령은 kubeconfig 파일을 업데이트할 것임을 나타낸다.

--region KR
- 지역 매개 변수를 "KR"로 지정하여 NCP 리소스가 위치한 지역을 나타낸다.

--clusterUuid f33ef9f4-e42c-43bc-b014-1382f643c935
- kubeconfig를 업데이트할 Kubernetes 클러스터의 UUID(Universally Unique Identifier)를 지정한다.

IAM 인증을 사용하여 지정된 Kubernetes 클러스터로 인증하는 데 필요한 구성 세부 정보가 포함된 로컬 Kubeconfig 파일을 업데이트한다. 여기에는 클러스터에 안전하게 액세스하고 관리하는 데 필요한 자격 증명, 인증서 정보가 포함된다.

 

- 그러면, 아래와 같은 config 파일이 생성된다. 이 파일을 찾기가 어려웠다; 영상에서는 바로 다운로드하여서 받을 수 있었는데, 인증 도구를 거쳐야 이 파일을 받을 수 있었다... 이제 Kubernetes 클러스터를 생성해보자

[root@s18a2221d60a .kube]# more config
apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUM2VEND
QWRHZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFWTVJNd0VRWURWUVFERXdwcmRXSmwKY201
bGRHVnpNQ0FYRFRJek1EZ3lNekV4TVRVeU5Wb1lEekl4TWpNd056TXdNVEV4TlRJMVdqQVZNUk13RVFZ
RApWUVFERXdwcmRXSmxjbTVsZEdWek1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNn
S0NBUUVBCjJKS3M3V1hrNnh0dUtXOHFVUUJTLytJVFltNnRNRm1pRnk3WFBwKzNsSFpyV1AvUWpUSnFr
eW1lbEFrckpVZ3QKWHdhTjN2Qk1ob1lFSUhINHNTNXYwRlJEbEJCbHJRRlozMW5xSTkxaStMYmg4Tzhq
SHQ0ZTg1Z3lVazVhZ2pzQwpiYkwraHVDb1VkT1Zya05YSzBEUUx3RmhrclVraTY5STI5bU1YcVg1bjF4
bDlaQ3kyVDJSU0hPMkhRSUFXWk92CmQ4SmR0dnJjZFkzWXVtQ29iTlJpMk9YVWJraWtSL2YreTVPRktC
Q1NmOHM0M2tFeWU3YzNwWGhkWm9PejhicE4KNEVIT0J0bE0yYWJhTXhFclZBcXRRZldPR2ZSV1VqaHpL
L1VDWUM3MkZ4ZTdmRHdaeUM0WHpnWmRJSUd3WTN4NgpIdlZWaWhsZ2NabVhnQWZ0Q1RzQXBRSURBUUFC
bzBJd1FEQU9CZ05WSFE4QkFmOEVCQU1DQXFRd0R3WURWUjBUCkFRSC9CQVV3QXdFQi96QWRCZ05WSFE0
RUZnUVUyZ3RBcXAxeDhvTUF2bTY2c0x1eExpUUlEcFF3RFFZSktvWkkKaHZjTkFRRUxCUUFEZ2dFQkFL
UlJVemI0eThwNDdyYkQzKzRVNVNoV2oyeEdlWFlvNnJISXhmS09DQ0RCTUlHZgpLNjNJa3FkR1lNRC9i
SlMrUUFzOTY2aGNMOTkwd2JUeXJnNmhaaER5dm0xQWE1RXNUVmVNRTJxZ3ZZVDhQWldnCnpaeTc4VXFs
akhkbCt5Y2lmY1ZJeDZPb2ZRVEZzVFdDRVdNMDZzakZlc0RtcmV2QmRndXA4dWlGSnNjUG53Qm8KREpx
b0RVODVTTmNUMURIV0pmUU9ZTjhlVklCOHU2TjlhSGNTdTJuQTNIUzJEUG1GRGtqWlRXZjB5UVJlUWxY
QQpCMHRaanU4dGtGK2oxK1M2b2gxZ0tYRWhGZHZBcHZ5ZXRsc2NpS09SL0ZyTHppZy9CMzlXN3RNckxZ
UDRqdCtQCi80YjhPekM5WTEyM3Vld2hCSEZjd1lqS0oxTklhYllQRnlOcjdoVT0KLS0tLS1FTkQgQ0VS
VElGSUNBVEUtLS0tLQo=
    server: https://f33ef9f4-e42c-43bc-b014-1382f643c935.kr.vnks.ntruss.com
  name: nks_kr_k8s-tiene_f33ef9f4-e42c-43bc-b014-1382f643c935
contexts:
- context:
    cluster: nks_kr_k8s-tiene_f33ef9f4-e42c-43bc-b014-1382f643c935
    user: nks_kr_k8s-tiene_f33ef9f4-e42c-43bc-b014-1382f643c935
  name: nks_kr_k8s-tiene_f33ef9f4-e42c-43bc-b014-1382f643c935
current-context: nks_kr_k8s-tiene_f33ef9f4-e42c-43bc-b014-1382f643c935
kind: Config
preferences: {}
users:
- name: nks_kr_k8s-tiene_f33ef9f4-e42c-43bc-b014-1382f643c935
  user:
    exec:
      apiVersion: client.authentication.k8s.io/v1beta1
      args:
      - token
      - --clusterUuid
      - f33ef9f4-e42c-43bc-b014-1382f643c935
      - --region
      - KR
      command: ncp-iam-authenticator
      env: null
      provideClusterInfo: false

kubectl get namespaces --kubeconfig config
kubectl 명령어를 테스트한다.
특정 구성 파일과 함께, kubectl 명령어를 통하여 Kubernetes 클러스터의 namespaces에 대한 정보를 검색한다.

kubectl
- Kubernetes 클러스터와 상호 작용하는 데 사용되는 명령어

get namespaces
- kubectl에게 Kubernetes 클러스터의 namespaces에 대한 정보를 검색하도록 지시한다. get 명령어는 다양한 Kubernetes 리소스를 가져오는 데 사용되며, 이 경우 namespaces을 가져온다.

--kubeconfig="config"
- 이 플래그는 Kubernetes 구성 파일의 위치를 지정한다.
- 구성 파일에는 일반적으로 인증 세부 정보를 포함하여 Kubernetes 클러스터에 연결하는 방법에 대한 정보가 포함되어 있다.

명령을 실행하면 클러스터에서 사용할 수 있는  namespaces 목록이 표시된다. 출력에는 일반적으로 각  namespaces에 대한 정보(예: 이름, 작성 날짜)가 포함된다. 액세스 권한에 따라 다른  namespaces 집합이 표시될 수 있다.

namespaces는 Kubernetes 클러스터 내에서 리소스를 논리적으로 분리하는 데 사용된다. 리소스를 보다 효과적으로 구성하고 관리할 수 있는 방법을 제공하기 때문에 동일한 클러스터를 공유하는 여러 팀 또는 프로젝트가 있을 때 특히 유용하다.


ncp-iam-authenticator create-kubeconfig --region KR --clusterUuid f33ef9f4-e42c-43bc-b014-1382f643c935 --output config
IAM(Identity and Access Management) 인증을 사용하는 네이버 클라우드 플랫폼(NCP)의 Kubernetes 클러스터에서 인증하기 위한 kubeconfig 파일 생성을 위해 사용한다. 

- '--output config': 이 매개 변수는 생성된 kubeconfig 파일의 출력 파일 이름을 지정한다.

이 명령을 실행하면 IAM 기반 인증을 사용하여 지정된 NCP Kubernetes 클러스터에 연결하는 데 필요한 인증 정보, 끝점 세부 정보 및 컨텍스트가 포함된 kubeconfig 파일('kubeconfig.yaml')이 생성된다. 그런 다음 생성된 kubeconfig 파일을 'kubectl' 명령과 함께 사용하여 클러스터를 관리하고 상호 작용할 수 있다.


kubectl --kubeconfig="config" create secret docker-registry regcred --docker-server=kslps0i6.kr.private-ncr.ntruss.com --docker-username=LjF --docker-password=XpU --docker-email=whwhdduq@naver.com
제공한 명령은 kubectl을 사용하여 "regcred"라는 이름의 "docker-registry" 유형의 Kubernetes Secret을 만드는 것이다. 이 Secret은 Kubernetes가 Docker 레지스트리에서 Docker 이미지를 가져올 수 있도록 Docker 레지스트리로 인증하는 데 사용된다.


kubectl
- Kubernetes 클러스터와 상호 작용하는 데 사용되는 명령어

--kubeconfig="config"
- 이 플래그는 Kubernetes 구성 파일의 위치를 지정한다.
- 구성 파일에는 일반적으로 인증 세부 정보를 포함하여 Kubernetes 클러스터에 연결하는 방법에 대한 정보가 포함되어 있다.

create secret docker-registry regreged
이 부분은 docker-registry 형식의 regreged라는 Kubernetes 비밀을 만들고 있으며 Docker-registry 형식은 Docker 이미지 레지스트리 인증에 사용된다.

--docker-server=kslps0i6.kr.private-ncr.ntruss.com
- 도커 레지스트리 서버의 URL을 지정한다.
- 이 경우 도커 레지스트리 서버의 URL은 'kslps0i6.kr.private-ncr.ntruss.com '이다.

--docker-username=LjF
- 도커 레지스트리 사용자 이름을 지정한다. 이 경우 사용자 이름은 LjF이다. 

--docker-password=XpU
- 이 플래그는 도커 레지스트리 암호를 지정한다. 여기에 제공되는 암호는 'XpU'이다.

--docker-email=whwhdduq@naver.com
- 도커 레지스트리 계정과 관련된 전자 메일을 지정한다.

 이 명령은 기본적으로 지정된 Docker 레지스트리 서버에 대한 인증 세부 정보(사용자 이름, 암호, 이메일)를 포함하는 'regcred'라는 이름의 Kubernetes 암호를 만든다.
이 암호는 Kubernetes 포드 또는 다른 리소스에서 지정된 레지스트리에서 이미지를 인증하고 꺼내는 데 사용할 수 있다.


kubectl --kubeconfig="config" get secret
kubectl을 사용하여 Kubernetes 클러스터의 secret에 대한 정보를 파악하는 명령어다.

kubectl
- Kubernetes 클러스터와 상호 작용하는 데 사용되는 명령어

--kubeconfig="config"
- 이 플래그는 Kubernetes 구성 파일의 위치를 지정한다.
- 구성 파일에는 일반적으로 인증 세부 정보를 포함하여 Kubernetes 클러스터에 연결하는 방법에 대한 정보가 포함되어 있다.

get secret
- 'kubectl'에게 Kubernetes 클러스터에 있는 비밀에 대한 정보를 검색하도록 지시한다.
- get 명령어는 다양한 Kubernetes 자원을 가져오는 데 사용되며, 이 경우에는 secret을 가져오는 것이다.

명령을 실행하면 클러스터에서 사용할 수 있는 secret 목록이 표시된다.
출력에는 일반적으로 이름, 유형 및 생성 날짜와 같은 각 비밀에 대한 정보가 포함된다.


[root@s18a2221d60a lab3]# more create_only_pod.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: apache-pod
  namespace: default
spec:
  containers:
  - name: apache-pod
    image: kslps0i6.kr.private-ncr.ntruss.com/image_apache:1.0
  imagePullSecrets:
  - name: regcred
[root@s18a2221d60a lab3]# 
YAML 파일 'create_only_Pod.yaml'은 'create-pod'라는 Kubernetes Pod 리소스를 정의한다.
이 Pod는 'kslps0i6.kr.private-ncr.ntruss.com/image_apache:1.0 ' Docker 이미지를 사용하여 컨테이너를 실행하도록 설정되어 있으며, 또한 'regcred'라는 이미지 pull secret를 사용하도록 구성되어 있다.


apiVersion: v1
- 이 리소스에 사용할 Kubernetes API 버전을 지정한다.

kind: Pod
- Pod 리소스임을 나타낸다.

metadata
- 이름 및 네임스페이스와 같은 포드에 대한 메타데이터 정보를 포함한다.

   - name: apache-pod
   - 포드의 이름을 "apache-pod"로 지정한다.

   namespace: default
   - 포드를 만들 namespace를 지정한다. "default" 로 namespace를 지정한다.

   spec
   - 컨테이너 및 기타 설정을 포함하여 Pod의 사양을 포함한다.

   containers
  - Pod 내에서 실행할 컨테이너 목록을 정의한다. 이 경우 컨테이너의 개수는 하나다.

   - name: apache-pod
   - 컨테이너의 이름을 "apache-pod"로 지정한다.

   image: kslps0i6.kr.private-ncr.ntruss.com/image_apache:1.0
   - 컨테이너에 사용할 도커 이미지를 지정한다.
   - 이미지는 'kslps0i6.kr.private-ncr.ntruss.com '의 레지스트리에서 가져온 것으로 이미지 이름은 'image_dump'이고 버전은 '1.0'이다.

  imagePullSecrets
  - 개인 레지스트리에서 이미지를 가져올 때 사용할 암호 목록을 지정한다.

  - name: regreged
    - 이미지 pull secret 의 이름을 지정한다. 이는 포드가 'regcred'라는 암호를 사용하여 'image' 필드에 지정된 도커 이미지를 인증하고 pull하는 것 의미한다.

요약하면, 이 YAML 파일은 특정 Docker 이미지를 사용하여 컨테이너를 실행하는 "apache-pod"라는 이름의 Kubernetes Pod를 정의한다. 컨테이너 이미지는 개인 Docker 레지스트리에서 꺼내지며 이미지를 가져오는 데 필요한 인증 정보는 "regred" 암호를 통해 제공된다. 이 설정은 Kubernetes 클러스터 내의 개인 컨테이너 이미지에 안전하게 액세스할 수 있도록 하려는 경우에 사용된다.


kubectl --kubeconfig="/rrot/config" create -f create_only_pod.yaml

- 이제 Pod를 생성하면 완료인데, Error가 발생했다. kubeconfig 위치가 잘못 지정되어서 발생한 오류였다.


 kubectl --kubeconfig="/root/.kube/config" create -f create_only_pod.yaml
kubectl'을 사용하여 "/root/.kube/config"에 있는 특정 kubeconfig 파일과 "create_only_pod.yaml"이라는 이름의 YAML 구성 파일을 사용하여 Kubernetes 클러스터에 리소스를 생성한다.

kubectl
- Kubernetes 클러스터와 상호 작용하는 데 사용되는 명령줄 도구

--kubeconfig="/root/.kube/config"
- 이 플래그는 kubeconfig 파일의 위치를 지정한다. kubeconfig 파일에는 인증 세부 정보를 포함하여 Kubernetes 클러스터에 연결하는 방법에 대한 정보가 포함되어 있다.

create -f create_only_pod.yaml
- "create_only_pod.yaml" YAML 파일의 정의를 기반으로 리소스를 생성할 것을 지정한다.

  create: 이 하위 명령은 리소스를 생성을 지시한다.

  -f create_only_pod.yaml: 이 플래그는 생성할 리소스의 구성을 포함하는 YAML 파일을 지정한다.

"create_only_pod.yaml" 파일에는 Kubernetes Pod 리소스의 정의가 포함되어 있을 수 있으며, 이 명령을 실행하면 'kubectl'이 해당 정의를 기반으로 Pod를 생성하도록 지시한다.


kubectl --kubeconfig="/root/.kube/config" apply -f create_deployment.yaml
kubectl --kubeconfig="/root/.kube/config" get pods
kubectl을 사용하여 "/root/.kube/config"에 있는 특정 kubeconfig 파일을 사용하여 YML 파일에 정의된 구성을 Kubernetes 클러스터에 적용한다.

kubectl
- Kubernetes 클러스터와 상호 작용하는 데 사용되는 명령줄 도구

--kubeconfig="/root/.kube/config"
- 이 플래그는 kubeconfig 파일의 위치를 지정한다. kubeconfig 파일에는 인증 세부 정보를 포함하여 Kubernetes 클러스터에 연결하는 방법에 대한 정보가 포함되어 있다.

apply -f create_deployment.yaml
- create_deployment.yaml" YAML 파일에 정의된 구성을 클러스터에 적용하도록 지정한다.

  apply: 이 하위 명령은 구성 변경을 적용할 것임을 나타낸다.

  -f create_deployment.yaml: 이 플래그는 적용할 구성이 포함된 YML 파일을 지정한다.

"create_deployment.yaml" 파일에는 Kubernetes Deployment 리소스 또는 기타 리소스의 정의가 포함되어 있을 수 있으며, 이 명령을 실행하면 'kubectl'에 YML 파일에 정의된 구성 변경 사항을 클러스터에 적용하도록 지시한다. 이렇게 하면 파일의 내용에 따라 리소스를 만들거나 업데이트해야 할 수 있다.


kubectl --kubeconfig="/root/.kube/config" apply -f create_service.yaml
kubectl --kubeconfig="/root/.kube/config" get service
create_service.yaml
kind: Service
apiVersion: v1
metadata:
  name: example-service
spec:
  ports:
  - port: 80
    targetPort: 80
  selector:
    app: apache
  type: LoadBalancer
'example-service'라는 이름의 Kubernetes 서비스 리소스를 정의한다. 이 서비스는 'app: apache'와 일치하는 레이블 선택기를 가진 Pod 집합을 표시하도록 구성되어 있다.

apiVersion: v1
- 이 리소스에 사용할 Kubernetes API 버전을 지정한다.

kind: Pod
- Pod 리소스임을 나타낸다.

metadata
- 이름 및 네임스페이스와 같은 포드에 대한 메타데이터 정보를 포함한다.

  name: example-service': 서비스 이름을 "example-service"로 지정한다.

spec: 구성을 포함한 서비스에 대한 규격이 포함되어 있다.

  ports: 서비스에 대한 포트 매핑 목록을 지정한다.

    port 80: 서비스에서 수신할 포트 번호를 지정한다.(이 경우 포트 80).

    targetPort: 80: 서비스가 트래픽을 전달할 포드 내의 대상 포트 번호를 지정한다.

  selector: 서비스가 트래픽을 라우팅할 포드와 일치하는 데 사용되는 레이블 집합을 지정한다..

    app: apache: 레이블 선택기는 서비스가 'app' 키와 'apache' 값을 가진 레이블이 있는 포드로 트래픽을 라우팅하도록 보장한다.. 이는 서비스가 노출할 포드를 파악하는 방법이다.

  type: LoadBalancer: 서비스 유형을 지정한다.. 이 경우 'LoadBalancer'로 설정된다. 즉, 서비스가 기본 클라우드 제공자에게 로드 밸런서를 요청하여 서비스를 외부로 노출한다.

이 구성은 LoadBalancer를 사용하여 선택한 포드를 노출하는 서비스를 설정하여 외부 트래픽이 레이블 선택기를 기반으로 포드에 도달할 수 있도록 한다. 서비스는 포트 80을 수신하고 수신 트래픽을 'app: apache' 레이블과 일치하는 포드로 전달한다. 이는 Kubernetes에서 실행 중인 응용 프로그램에 외부 액세스를 제공하려는 경우에 일반적으로 설정된다.
kubectl을 사용하여 "/root/.kube/config"에 있는 특정 kubeconfig 파일을 사용하여 Kubernetes 클러스터의 서비스에 대한 정보를 검색한다.

kubectl
- Kubernetes 클러스터와 상호 작용하는 데 사용되는 명령줄 도구

--kubeconfig="/root/.kube/config"
- 이 플래그는 kubeconfig 파일의 위치를 지정한다. kubeconfig 파일에는 인증 세부 정보를 포함하여 Kubernetes 클러스터에 연결하는 방법에 대한 정보가 포함되어 있다.

get service
'kubectl'에게 Kubernetes 클러스터의 서비스에 대한 정보를 검색하도록 지시한다. get 명령어는 다양한 Kubernetes 리소스를 가져오는 데 사용되며, 이 경우 서비스를 가져오는 것이다.

명령을 실행하면 클러스터에서 사용할 수 있는 서비스 목록이 표시된다. 출력에는 일반적으로 이름, 유형, 클러스터 IP, 외부 IP(해당하는 경우) 및 포트와 같은 각 서비스에 대한 정보가 포함된다. 액세스 권한에 따라 다른 서비스 집합이 표시될 수 있다.


출처 : www.edwith.org/professioanl-vpc

참고 : https://guide.ncloud-docs.com/docs/k8s-iam-auth-ncp-iam-authenticator

반응형