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 ~ $