traefik 설치 과정에서도 검토해봤지만, 외부 접속을 k8s 내부로 어떻게 끌어올지가 여전히 문제다. 여러 서비스가 k8s 세계 안에서 조화롭게 돌아가고 ingress controller를 traefik으로 설정해서 특정 도메인과 포트로 접속하면 k8s 내부의 원하는 리소스에 접근할 수 있게 되어 있다 한들, 실제 공인IP의 세계로 연결하는 게 오리무중인 상황이어서야 의미가 없다.
terraform 설명 글을 찾아봐도 당연스럽게 LoadBalancer 타입을 사용하도록 되어 있을 뿐, on-premise 환경에서 어떤 처방이 있는지를 언급하는 데가 없다.
(https://www.hashicorp.com/blog/managing-kubernetes-applications-with-hashicorp-terraform 를 보고 복붙만 해봤는데 plan에서 주루룩 지정될 항목이 나오는 점은 좋았다. apply가 끝이 나질 않아서 살펴보니 LoadBalancer를 사용하고 있어서 중단했을 뿐)
https://github.com/kubernetes/kubernetes/issues/36220#issuecomment-351782407 얘기에 https://kubernetes.io/docs/tasks/administer-cluster/developing-cloud-controller-manager/ 같이 CCM을 직접 만들면 될 거라는 얘기가 그럴듯해 보인다. type:LoadBalancer에 대응하는 구현체가 있으면 되는 건 맞을 테니까.
CCM은
https://zetawiki.com/wiki/%EC%BF%A0%EB%B2%84%EB%84%A4%ED%8B%B0%EC%8A%A4_%EC%9A%A9%EC%96%B4 설명을 보면 k8s system의 일부로 돌아가면서 해당 환경에 맞는 관리 동작을 하는 정도로 이해가 된다. ingress controller가 k8s 안쪽으로 진입한 트래픽을 다루는 거라면 CCM은 k8s 가장 바깥이 그 밖의 세계와 어떻게 이어져야 하는지를 처리해야 하겠지.
https://www.reddit.com/r/kubernetes/comments/a0vrw7/metallb_and_traefik_decision_on_premise/ealnhun/
MetalLB가 여기 대응하는 물건이라고 한다. (ingress controller와는 다르다는 걸 명시해줘서 이해에 도움이 된다)
https://medium.com/@JockDaRock/metalloadbalancer-kubernetes-on-prem-baremetal-loadbalancing-101455c3ed48
https://medium.com/@JockDaRock/kubernetes-metal-lb-for-on-prem-baremetal-cluster-in-10-minutes-c2eaeb3fe813
여기 좀 더 내용이 있다.