쿠버네티스(13) : Ingress Nginx Controller 배포

NOHHYEONGJUN·2024년 10월 5일

쿠버네티스

목록 보기
14/23

1. nginx-ingress

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로 라우팅


 

 


2. ingress-nginx-controller

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
  

 

 


3. ingress-nginx-deploy

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

 

 


4. Loadbalancer 설정

온프레미스에 클러스터 구성 시 , 로드밸런서 타입은 externel IP가 없어 pending 상태일 것이다.
MetalLB를 사용해 로드밸런서를 구성해야 한다.

kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.14.8/config/manifests/metallb-native.yaml

 

metallb-config

---
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

profile
Cloud/DevOps & Network Virtualization에 관심 있는 Engineer입니다. 🐳⚓️👨‍✈️

0개의 댓글