Ingress

dongbin_Shin·2022년 11월 15일
0

kubernetes

목록 보기
14/16
post-custom-banner

사용 예시

Service LoadBalancing

  • Pod마다 Service를 연결한 후 path에 따라 트래픽을 연결시켜 줌

Canary Upgrade

  • 업그레이드 할 Pod에 별도의 Service를 연결시킨 후 설정한 비율의 트래픽을 업그레이드 할 Pod으로 연결시킬 수 있음

Ingress Controller

  • Ingress Controller라고 부르는 Ingress를 구현할 별도의 플러그인을 설치해야 함
  • 대표적인 예시로 Nginx, Kong과 같은 플러그인이 존재
    • 플러인을 설치하면 namespace가 생성되고 그 위에 Ingress 구현체 역할을 하는 Pod이 생성됨 (Deployment가 생성되어 관리 및 생성)
    • 구현체 Pod의 Ingress rule에 따라 Service 및 Pod에 트래픽을 전달시켜 줌
    • 외부에서 구현체 Pod에 트래픽을 전달해야 하기 때문에 Nginx Service와 같이 구현체 Pod에 연결되는 Service를 통해 전달
  • Ingress rule에 path 없이 host 이름만으로 서비스와 연결할 수 있음

Ingress 구성 요소

  • Host: 도메인 이름
  • Path: 요청 받을 path
  • serviceName: path에 따라 연결할 service의 이름

Ingress 기능

Service LoadBalancing

Pod마다 Service를 매핑시키고 Ingress를 이용해 path에 따라 각각의 Service로 트래픽을 전달시켜 LoadBalancing 역할을 구현할 수 있음

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: service-loadbalancing
spec:
  rules:
  - http:
    paths:
      - path: /
        backend:
          serviceName: svc-shopping
          servicePort: 8080
      - path: /customer
        backend:
          serviceName: svc-customer
          servicePort: 8080
      - path: /order
        backend:
          serviceName: svc-order
          servicePort: 8080

Canary Update

  • 업데이트 할 Pod와 원래의 Pod를 Ingress와 연결시키고 @weight: 10% 와 같이 트래픽의 특정 비율만 업데이트 Pod으로 보낼 수 있음
  • @header 를 이용해 특정 헤더를 갖고 있는 트래픽만 보낼 수 있음
  • 이외에 다양한 어노테이션이 존재
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: canary-v2
  annotations:
    nginx.ingress.kubernetes.io/canary: "true"
    nginx.ingress.kubernetes.io/canary-weight: "10"
    nginx.ingress.kubernetes.io/canary-by-header: "Accept-Language"
    nginx.ingress.kubernetes.io.canary-by-header-value: "kr" 
spec:
  rules:
  - host: www.app.com
    http:
      paths:
      - backend:
        serviceName: svc-v2
        servicePort: 8080

HTTPS

  • Pod 자체에서 인증서를 제공하기 힘들 때 유용
  • Ingress Pod의 port 중 443을 오픈하고 Service와 연결
  • Ingress의 tls라는 옵션에서 secretName을 Secret 오브젝트와 연결하고 Secret 오브젝트에 인증서를 저장
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: https
spec:
  tls:
  - hosts:
    - www.https.com
    secretName: secret-https
  rules:
    - host: www.https.com
      http:
        paths:
        - backend:
          serviceName: svc-https
          servicePort: 8080
profile
멋있는 백엔드 개발자
post-custom-banner

0개의 댓글