k8s ingress 를 활용한 가상 호스팅
1. 개요
“knufesta2019.freshtuna.me” 와 “floweryroad-api.freshtuna.me” 로 접근할수 있는 두개의 웹서비스들을 k8s 오브젝트 ingress 를 통해 가상호스팅 하는 예제를 다루어보고자 한다.
2. 인증에 필요한 tls 전용 secret 오브젝트 생성
secret을 생성하기 전에 미리 letsencrypt등을 통해 ssl 를 위한 키를 발급 받아야한다!
kubectl create secret tls freshtuna-me \
--cert cert.pem --key privkey.pem
3. ingress.yaml 작성
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: freshtuna-ingress
annotations:
ingress.kubernetes.io/rewrite-target: /
kubernetes.io/ingress.class: "nginx"
spec:
tls:
- hosts:
- "knufesta2019.freshtuna.me"
secretName: "freshtuna-me"
- hosts:
- "floweryroad-api.freshtuna.me"
secretName: "freshtuna-me"
rules:
- host: "knufesta2019.freshtuna.me"
http:
paths:
- path: /
backend:
serviceName: "knufesta2019"
servicePort: 80
- host: "floweryroad-api.freshtuna.me"
http:
paths:
- path: /
backend:
serviceName: "floweryroad"
servicePort: 80
4. 다른 네임스페이스의 서비스 접근을 위한 services.yaml 작성
apiVersion: v1
kind: Service
metadata:
name: knufesta2019
spec:
type: ExternalName
externalName: production-was.knufesta2019.svc.cluster.local
---
apiVersion: v1
kind: Service
metadata:
name: floweryroad
spec:
type: ExternalName
externalName: production-was.floweryroad.svc.cluster.local
5. ingress controller 설치 및 작성한 yaml 파일들을 적용
# ingress controller 설치 (url이 달라질수 있으니 확인하고 적용하기!)
sudo kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.35.0/deploy/static/provider/baremetal/deploy.yaml
# 서비스 생성
sudo kubectl apply -f services.yaml
# ingress 적용
sudo kubectl apply -f ingress.yaml