apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nginx-ingress
annotations:
kubernetes.io/ingress.class: nginx
spec:
rules:
- host: example.com # 실제 도메인으로 변경 필요
http:
paths:
- path: /app1
pathType: Prefix
backend:
service:
name: app1-service
port:
number: 8080
- path: /app2
pathType: Prefix
backend:
service:
name: app2-service
port:
number: 8081
defaultBackend:
service:
name: nginx-service
port:
number: 8080
defaultBackend : rule이 매칭되지 않은 트래픽은 defaultBackend로 라우팅
apiVersion: v1
kind: Service
metadata:
name: ingress-nginx-controller
namespace: ingress-nginx
spec:
type: LoadBalancer
loadBalancerIP: 112.xxx.xxx.xxx
ports:
- port: 80
targetPort: 80
protocol: TCP
name: http
- port: 443
targetPort: 443
protocol: TCP
name: https
- port: 8080
targetPort: 8080
protocol: TCP
name: custom-http
selector:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/instance: ingress-nginx
app.kubernetes.io/component: controller
curl -L https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.8.2/deploy/static/provider/cloud/deploy.yaml -o ingress-nginx-deploy.yaml
kubectl apply -f ingress-nginx-deploy.yaml
온프레미스에 클러스터 구성 시 , 로드밸런서 타입은 externel IP가 없어 pending 상태일 것이다.
MetalLB를 사용해 로드밸런서를 구성해야 한다.
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.14.8/config/manifests/metallb-native.yaml
---
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
name: external-ip-pool
namespace: metallb-system
spec:
addresses:
- 112.xxx.xxx.xxx/32
autoAssign: true
---
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
name: l2-network
namespace: metallb-system
spec:
ipAddressPools:
- external-ip-pool
---
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
name: internal-ip-pool
namespace: metallb-system
spec:
addresses:
- 10.0.0.1/32
- 10.0.0.3/32
- 10.0.0.5/32
- 10.0.0.7/32
autoAssign: false