클라우드플레어 터널
nginx 삭제하고, 클라우드플레어 터널 설치
ingress-nginx, cert-manager 삭제하고 cloudflare 터널로 대체했다.
계기
계기는 내 argocd와 grafana 대시보드를 퍼블릭 주소로 노출시켰던 것이다.
당연히 보안 문제가 있다. 개인 쿠버네티스에 vpn까지 구축하는건 부담스러웠다.
찾아보니 간단한 대안으로 Cloudflare Access 서비스가 있었다.
내 도메인 자체는 이미 클플에 연결되어 있고, 간단한 추가 설정만 하면 페이지 접속시에 지정한 인증 절차를 추가할 수 있었다.
깃헙 로그인을 붙이고, 인증된 이메일이 내가 설정한 내 계정 이메일일 경우에만 인가시켜줬다. 잘 동작했다.
문제는 DNS 도메인에 붙은 설정이라, 내 서버의 외부 ip를 알고 직접 요청하면 우회할 수 있는 허점이 있다.
내 argocd 대시보드 주소가 argocd.mydomain.com일 때 아래 명령어로 로드밸런스 외부 ip로 접근할 수 있다.
문제 해결을 위해 cloudflare turnnel을 설치하기로 했다.
cloudflare turnnel을 설정하면 origin 서버의 외부 ip가 노출되지 않게 된다.
사용자의 요청은 cloudflare turnnel 엣지 네트워크까지만 도달한다.\
설치 방법
cli로 터널을 생성하는 방법과 웹 대시보드에서 생성하는 방법이 있다.
둘 다 해보니 웹 대시보드를 사용하는게 낫다.
대시보드에서 설정된 리스트를 확인하는게 편하고, 컨피그맵도 별도로 필요없어서 설정이 편하다.
클라우드플레어 > 제로 트러스트 > 네트워크 > tunnel 웹 대시보드에서 turnel을 생성한다.
생성 후에 개요 탭에서 토큰을 확인 할 수 있다. 복사한다.\
위 명령어로 토큰 시크릿키를 생성한다.
위 디플로이를 생성 후 적용한다.
위 파드는 프록시 역할을 한다. 아래 순서와 같이 트래픽이 흐르기 때문에, 추후에 확장이 필요할 수도 있다.
Cloudflare 엣지 -> Cloudflare 네트워크 내부의 보안 터널 -> 클러스터 내 cloudflared 포드 -> 내부 서비스
끝이다. 정말 간단하다.
이제 웹 대시보드의 공개 호스트 탭에서 도메인과 서비스 주소를 추가하면 접속이 된다.
예를들어 공개호스트 : grafana.domain.com / 하위 서비스 : http://monitoring-grafana.monitoring:80 으로 설정하면 내부의 서비스에 연결된다.\
단, argocd의 경우에는 이슈가 있다.
위와 같이 연결하면 ERR_TOO_MANY_REDIRECTS 에러가 발생하고 url 접속이 안된다.
내부에서 자동으로 https로 리다이렉트 하나 본데, cert-manager를 삭제해서 내부 인증서가 없고 그래서 문제가 생기는 것 같다.
쉬운 해결방법으로는 하위 서비스 주소를 https로 변경하고(ex. https://argocd-server.argocd:443) 세부 옵션에서 "TLS 확인 없음" 설정을 하는 것이다.
ingress-nginx와 cert-manager는 삭제했다.
argocd로 앱을 볼 때 인그레스와 인증서 관련 파드들 때문에 되게 복잡해 보였는데, 이제는 디플로이와 서비스만 남아서 훨씬 깔끔해졌다.
로드밸런서 인스턴스도 삭제했다. 월 5달러 정도 비용이 줄었다.
결론
좋다. 단점이라고 해봐야 클라우드 플레어에 종속성이 높아진다는 것인데, 어차피 난 클플없이 서비스 못만든다.
앞으로 무조건 터널을 사용해서 쿠버네티스 구성을 할 생각이다.
Last updated on