인프라/NCP k8s 세팅방법

4. Bastion Host Server (중간 서버) SSH 접속 설정

보더96 2026. 9. 2. 11:50

보안적인 이유로 로컬 컴퓨터에서만 SSH 접속 되도록 설정하기

 

이전에 생성한 bastion-host acg에 규칙 추가

1-1) SSH 접속을 위한 설정

1. 로컬 컴퓨터에서 중간 서버로 SSH 접속하기 위한 작업

 

2. 중간 서버에서 쿠버네티스 클러스터 노드 서버로 접속하기 위한 설정

: 목적지에 K8s 클러스터를 구성한 Private Subnet IP 대역 입력

 

3. 쿠버네티스 클러스터 생성으로 인해서 자동으로 생성된 쿠버네티스 ACG에 22번 포트 추가

: 중간 서버 IP만 SSH 허용해주기

 

① 중간 서버 비공인 IP 확인

 

② 중간 서버 인바운드 비공인 IP 22번 포트 허용 및 아웃바운드( 0.0.0.0/0 대역의 1-65535 포트 허용 )

: 아웃바운드에 모든 대역을 허용함으로써 이후 curl 작업이 가능해진다.

 

1-2) SSH 접속 연결

1. PUTTY 를 사용하여 SSH 접속 연결

 

2. 편의성을 위해 root 비밀번호 변경

 

 

1-3) kubectl 및 IAM 도구 설치

※ 네이버클라우드플랫폼에서 제공하는 설치가이드를 참고하여 kubectl 및 IAM 도구 설치

쿠버네티스(Kubernetes) 클러스터의 API 서버는 시스템의 심장부와 같다. 보안을 위해 이 API 서버를 Private 환경에 구축했다면, 관리자는 Bastion Host에 관리 도구(kubectl, IAM)를 설치하여 안전한 관리 환경을 구축하는 것이 정석이다.

 

 ① kubectl: 클러스터 조종석의 단일화

     kubectl 은 클러스터에 명령을 내리는 전용 핸들이다. 이를 관리자 개인 PC 가 아닌 Bastion Host 에 설치하는 이유는 다음과 같다.

    · 엔드포인트 보호: 쿠버네티스 API 서버를 퍼블릭에 노출하지 않고, 오직 Bastion Host의 IP만 허용하도록 설정할 수 있다.

    · 일관된 환경: 여러 관리자가 동일한 버전의 kubectl과 설정 파일(kubeconfig)을 공유하며 작업할 수 있어 휴먼 에러를 줄인다.

    · 간접 통신: 관리자는 내 PC -> Bastion -> API Server 순서로 접속하게 되므로, 직접적인 공격 노출을 원천 차단한다.

 

② IAM 도구: 세밀한 출입 통제 (RBAC과의 연동)

    클라우드 환경에서 쿠버네티스를 운영한다면, 누가 클러스터에 접근할 수 있는지 결정하는 **권한 관리(IAM)**가 핵심이다.

    · 권한의 중앙 집중화: Bastion Host 자체에 특정 IAM Role을 부여하거나, IAM 인증 도구(예: aws-iam-authenticator)를 설치하여 "인증된 관리자"만 클러스터 명령어를 실행하게 다.

    · 최소 권한 원칙: 관리자 개개인에게 과도한 권한을 주기보다, Bastion Host라는 통제된 환경 안에서만 특정 작업을 수행하도록 제한할 수 있다.

    · Audit 강화: 누가 어떤 IAM 권한을 사용하여 클러스터에 변경을 가했는지 Bastion의 로그와 클라우드 감사 로그(CloudTrail 등)를 통해 교차 검증이 가능하다.

 

[설정 가이드]

 

1. kubectl 설치 ( 터미널에서 작업 )

# 1. 최신 릴리스 다운로드 (Linux x86-64 기준)
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"

# 바이너리 유효성 검사 (선택 사항)
# 실패 시 파일 손상 및 악의적인 변경이 있을 수 있다.
# 체크섬 파일 다운로드
curl -LO "https://dl.k8s.io/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl.sha256"
# 다운로드한 kubectl 과 체크섬 대조
echo "$(cat kubectl.sha256)  kubectl" | sha256sum --check

# 2. kubectl 설치 및 실행 권한 부여
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl

# 3. 설치 확인
kubectl version --client

 

2. IAM 설치 ( 터미널에서 작업 )

네이버 클라우드 플랫폼의 관리형 쿠버네티스(NKS)를 외부에서 안전하게 관리하려면, NCP의 IAM 계정 정보를 기반으로 클러스터 인증을 도와주는 ncp-iam-authenticator가 필요하다.

# 1. 홈 디렉토리로 이동 후 바이너리 다운로드
cd ~
curl -o ncp-iam-authenticator -L https://github.com/NaverCloudPlatform/ncp-iam-authenticator/releases/latest/download/ncp-iam-authenticator_linux_amd64

# 2. 실행 권한 부여 및 경로 설정
# 2-1. 파일에 실행 권한 추가
chmod +x ./ncp-iam-authenticator

# 2-2. 사용자 개별 바이너리 저장용 bin 디렉토리 생성 및 복사
mkdir -p $HOME/bin 
cp ./ncp-iam-authenticator $HOME/bin/ncp-iam-authenticator

# 2-3. 현재 세션에 PATH 추가
export PATH=$PATH:$HOME/bin

# 3. 환경 변수 영구 반영
# 3-1. ~/.bash_profile 끝에 PATH 추가 (Ubuntu 등에서는 ~/.bashrc 권장)
echo 'export PATH=$PATH:$HOME/bin' >> ~/.bash_profile

# 3-2. 변경 사항 즉시 반영
source ~/.bash_profile

# 4. 정상 동작 확인
ncp-iam-authenticator help

 

1-4) NCP IAM 인증 및 NKS 클러스터 연결 (kubeconfig 설정)

kubectl 과 ncp-iam-authenticator 설치를 마쳤다면, 이제 내 계정 정보를 연결하여 실제 NCP 쿠버네티스 클러스터(NKS)를 제어할 차례다.

 

1.  API 인증키 설정 (Access & Secret Key) 

NCP 마이페이지의 '인증키 관리'에서 확인한 API 참조키를 Bastion Host 에 등록해야 한다. 두 가지 방법 중 편한 방법을 선택한다.

 

방법에 앞서, NCP 콘솔에서 인증키값 확인하기

 

방법 A: 환경 변수(ENV)로 일시적 설정

export NCLOUD_ACCESS_KEY="사용자의_Access_Key"
export NCLOUD_SECRET_KEY="사용자의_Secret_Key"
export NCLOUD_API_GW=https://ncloud.apigw.ntruss.com

 

방법 B: 설정 파일생성 (권장 - 영구석 설정)

mkdir -p ~/.ncloud
vi ~/.ncloud/configure

# 아래 내용을 입력 후 저장
[DEFAULT]
ncloud_access_key_id = 사용자의_Access_Key
ncloud_secret_access_key = 사용자의_Secret_Key
ncloud_api_url = https://ncloud.apigw.ntruss.com

 

2.  kubeconfig 생성 (ncp-iam-authenticator 활용) 

이제 인증 도구를 사용해 클러스터 접속 정보를 담은 kubeconfig.yaml 파일을 생성한다.

· Cluster UUID 확인: NCP 콘솔 > Services > Kubernetes Service > 클러스터 상세 페이지에서 확인 가능하다.

ncp-iam-authenticator create-kubeconfig \
  --region KR \
  --clusterUuid [your-cluster-uuid] \
  --output kubeconfig.yaml

 

3.  접속 테스트 및 편의 설정 (Alias)

생성된 설정 파일을 사용하여 클러스터와 통신이 되는지 확인한다.

# 특정 설정 파일을 지정하여 테스트
kubectl get namespaces --kubeconfig kubeconfig.yaml

 

매번 -- kubeconfig 옵션을 붙이는 것이 번거롭다면, alias 를 설정하여 간소화한다.

vi ~/.bash_profile

# 파일 맨 밑에 추가
alias kubectl='kubectl --kubeconfig="$HOME/kubeconfig.yaml"'

# 변경 사항 반영
source ~/.bash_profile

# 이제 옵션 없이 바로 사용 가능
kubectl get namespaces

 

1-5) [중요] 보안 강화: ACG 규칙 정리

설정 과정에서 원활한 통신을 위해 일시적으로 오픈했던 ACG(Access Control Group) 규칙을 정리해야 한다.

· 조치 사항: 아웃바운드(Outbound) 규칙에 추가했던 0.0.0.0/0 (모든 포트 1-65535) 허용 정책을 삭제한다.

· 이유: 초기 설정이 끝난 후에는 필요한 통신 채널만 남겨두는 것이 '최소 권한 원칙'에 부합하며, Bastion Host의 보안을 지키는 핵심이다.

 

1-6) [보안 필수] 설정 파일 권한 제한 (Permission Hardening)

~/.ncloud/configure와 kubeconfig.yaml 파일에는 여러분의 계정 인증키와 클러스터 접속 정보가 평문으로 저장되어 있다. Bastion Host에 접근할 수 있는 다른 사용자가 이 파일을 읽지 못하도록 권한을 엄격히 제한해야 한다.

# 본인(소유자)만 읽고 쓸 수 있도록 권한 변경 (600: rw-------)
chmod 600 ~/.ncloud/configure
chmod 600 ~/kubeconfig.yaml

▶ 보안 팁: 리눅스 환경에서 민감한 키 파일은 항상 600 권한을 유지하는 것이 모범 사례다.