[k8s] Cloudflare Tunnel로 엔드포인트 열기
https://blog.naver.com/sssang97/224260443815
온프레미스 쿠버를 운영하다보면 번거롭고 귀찮은 것 중 하나가 public endpoint를 열고 도메인과 ssl을 붙이는 것이다.
Cloudflare를 쓰고 Cloudflare에 도메인이 있다면 이걸 비교적 쉽게 해결할 수 있다. Tunnel이 동적인 public endpoint 구성을 도와주기 때문이다.
Tunnel 앱 구성
먼저 클러스터에서 공통으로 사용할 앱을 하나 만들어준다.

앱을 먼저 적당히 하나 만들어준다.

그리고 저 명령에서 나오는 Token을 추출해서 보관한다.
쿠버에 cloudflared 세팅하기
cloudflare가 Tunnel을 연결하려면 전용 데몬인 cloudflared를 세팅해줘야 한다.
먼저 방금 받아온 토큰을 시크릿으로 넣어준다.
kubectl create secret generic cloudflared-token \
--from-literal=token="YOUR_COPIED_CLOUDFLARE_TOKEN" \
--namespace=kube-system

그리고 cloudflared용 deployment를 하나 정의해서 즉시 생성한다.
vim cloudflared.yaml
kubectl apply -f cloudflared.yamlapiVersion: apps/v1
kind: Deployment
metadata:
name: cloudflared-deployment
namespace: kube-system
spec:
replicas: 2
selector:
matchLabels:
app: cloudflared
template:
metadata:
labels:
app: cloudflared
spec:
containers:
- name: cloudflared
image: cloudflare/cloudflared:latest
args:
- tunnel
- --no-autoupdate
- --metrics
- 0.0.0.0:2000
- run
env:
- name: TUNNEL_TOKEN
valueFrom:
secretKeyRef:
name: cloudflared-token
key: token
livenessProbe:
httpGet:
path: /ready
port: 2000
initialDelaySeconds: 15
periodSeconds: 10

그래서 이렇게 잘 뜨고

연결도 확인이 되면 거의 다 된 것이다.

터널 엔드포인트 등록하기
이제 만들어놓은 세팅을 기반으로 DNS 기반 엔드포인트를 열어보자.
이번에 열어볼 것은 headlamp다. 지금은 내부 IP로만 접근이 되는데

이걸 적당히 쿠버 내부 IP나 DNS로 등록해주면

바로 외부에서도 이렇게 접근이 가능해질 것이다.
이게 꽤 편하다.
이러면 Cloudflare를 거쳐서 쓰기 때문에 IP 기반 화이트리스트 처리나 이런저런 보안 설정도 손쉬운 편이다.
참조
https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/deployment-guides/kubernetes/
https://developers.cloudflare.com/tunnel/deployment-guides/kubernetes/
https://medium.com/@_jonas/cloudflare-tunnel-as-a-kubernetes-deployment-ingress-9f943cd442a6