쿠버네티스에서 TLS 인증서가 서비스 대상 namespace에 존재하지않고 다른 namespace에 존재할경우 TLS를 복사해서 서비스 namespace에 옮겨야하는데, 이런경우에 굳이 TLS인증서를 복사하지않고 TLS를 적용 할 수 있는 방법이 있다.
Nginx-ingress를 사용할 경우 Virtualserver, VirtualserverRoute를 이용하여 문제를 해결할수있다. VirtualServer는 명시되어있는 routes를 통해 VirtualserverRoute가 떠있는 namespace의 서비스로 트래픽을 흘려보낸다.
- 즉, 트래픽이 들어오는곳은 TLS인증서가 있는 VirtualServer를 통해서, 서비스의 namespace에 떠있는 VirtualserverRoute로 전송
상황은 다음과같이 설정
- Grafana 서비스는 grafana라는 namespace에 존재. 서비스 이름도 grafana
- TLS인증서는 nginx-ingress라는 namespace에 존재
Virtualserver는 우리가 자주 사용하는 ingress 리소스와 동일하다라고 봐도된다. 다만 여기에 spec.route부분에 어느 VirtualserverRoute와 연결할것인지 명시해줘야한다.
apiVersion: k8s.nginx.org/v1
kind: VirtualServer
metadata:
name: "grafana"
namespace: "nginx-ingress"
spec:
host: "grafana.test.com"
route:
- path: "/"
route: grafana # grafana namespace에 생성할 virtualserverroute 이름
tls:
secret: tls-secret
Grafana namespace에는 다음과같은 VirtualserverRoute 리소스를 생성한다.
- grafana.test.com이라는 호스트에 접근하게되면 grafana라는 upstream에 명시된 서비스 리소스로 가게됨
- upstreams에는 grafana와 연결된 service 리소스의 내용을 적어주면됨. (현재 grafana namespace에는 grafana라는 service리소스가 10003 포트를 사용하고있음)
apiVersion: k8s.nginx.org/v1
kind: VirtualServerRoute
metadata:
name: "grafana"
namespace: "grafana"
spec:
host: "grafana.test.com"
subroutes:
- path: "/"
action:
pass: "grafana"
upstreams:
- name: "grafana"
service: "grafana"
port: 10003
'Develop > DevOps' 카테고리의 다른 글
[DevOps] 인증서 관련해서 내용 정리 (1) | 2024.12.19 |
---|---|
[github] github action Auto Assign 사용 (0) | 2024.11.24 |
[DevOps] Terraform, Terragrunt 에 대한 정리 (0) | 2024.11.23 |
[Grafana] database is locked 에러 대응 + DB migration (2) | 2024.10.17 |
[k8s] Kubernetes taint & toleration & nodeAffinity 공부 (0) | 2024.08.27 |