Kops에서 Bastion 호스트 SSH로 접속하기

2019-01-02

네트워크에서 바스티온 호스트(Bastion Host)는 침입차단 소프트웨어가 설치되어 내부와 외부 네트워크 사이에서 일종의 게이트 역할을 수행하는 호스트로 네트워크 보안에 가장 중요한 방화벽 호스트로써 방화벽의 메인서버를 의미하기도 한다.1

AWS 컨텍스트에서는 바스티온 호스트를 내부 네트워크에 접속할 수 있는 서버로 정의하는데 2, Kops에서는 바스티온 호스트를 프로비저닝하고 3, 이를 통해 프라이빗 네트워크 인스턴스에 접속한다. (AWS 바스티온 구조 4)

이를 테면, 다음과 같이 쿠버네티스 마스터 노드와 워커 노드가 구성되어 있다고 하자. 이들 인스턴스들은 내부 네트워크에 존재하므로 바스티온 호스트를 통해 접속해야 한다.

$ kubectl get node
NAME                                            STATUS   ROLES    AGE   VERSION
ip-10-1-117-65.ap-northeast-1.compute.internal  Ready    master   49d   v1.10.11
ip-10-1-157-17.ap-northeast-1.compute.internal  Ready    master   49d   v1.10.11
ip-10-1-16-19.ap-northeast-1.compute.internal   Ready    master   49d   v1.10.11
ip-10-1-178-52.ap-northeast-1.compute.internal  Ready    node     45d   v1.10.11
ip-10-1-82-30.ap-northeast-1.compute.internal   Ready    node     44d   v1.10.11
ip-10-1-96-13.ap-northeast-1.compute.internal   Ready    node     44d   v1.10.11
ip-10-1-199-22.ap-northeast-1.compute.internal  Ready    node     45d   v1.10.11
ip-10-1-135-94.ap-northeast-1.compute.internal  Ready    node     45d   v1.10.11
...

이 때, 바스티온 호스트에 프라이빗 키를 복사해서 바스티온에 로그인하여 내부 서브넷 인스턴스로 접속할 수도 있지만, 다음과 같이 ssh 프락싱을 사용하고 5, 접속하려는 호스트 네임을 동적으로 구성해서 좀 더 쉽게 접속할 수도 있다.

$ vi ~/.ssh/config
Host k8s-prod
	HostName bastion.prod.k8s.example.net
	User core
	IdentityFile ~/.ssh/prod.k8s.id_rsa
	
Host ip-10-1-*
	User core
	ProxyCommand ssh -q -W %h:%p k8s-prod
	IdentityFile ~/.ssh/prod.k8s.id_rsa
...

위의 구성이 끝나면, 다음과 같이 한번에 로컬에서 내부 서브넷 호스트에 접속할 수 있게 된다.

$ ssh k8s-prod
Last login: Wed Jan  2 12:20:25 UTC 2019 from 10.x.x.xx on ssh
Container Linux by CoreOS stable (1911.5.0)
core@ip-10-x-x-x ~ $

$ ssh ip-10-1-178-52.ap-northeast-1.compute.internal
Last login: Wed Jan  2 12:47:40 UTC 2019 from 10.1.178.52 on pts/0
Container Linux by CoreOS stable (1911.5.0)
core@ip-10-1-178-52 ~ $

Yeongpil Yoon

Powered by Hugo & Kiss.