IngressRouteUDP
출처: IngressRouteUDP
본문
IngressRouteUDP
IngressRouteUDP는 Traefik UDP 라우터의 CRD 구현이에요.
IngressRouteUDP 객체를 만들기 전에 Traefik Kubernetes CRD를 Kubernetes 클러스터에 적용해야 해요.
이렇게 하면 IngressRouteUDP kind와 기타 Traefik 전용 리소스가 등록돼요.
Configuration Example (설정 예시)
IngressRouteUDP
apiVersion: traefik.io/v1alpha1
kind: IngressRouteUDP
metadata:
name: ingressrouteudpfoo
namespace: apps
spec:
ingressClassName: traefik-lb
entryPoints:
- fooudp # The entry point where Traefik listens for incoming traffic.
routes:
- services:
- name: foo # The name of the Kubernetes Service to route to.
port: 8080
weight: 10
nativeLB: true # Enables native load balancing between pods.
Configuration Options (설정 옵션)
| Field | Description | Default | Required |
| ingressClassName | 사용할 IngressClass 클러스터 리소스를 정의해요. 더 이상 사용되지 않는 kubernetes.io/ingress.class 어노테이션을 대체해요. spec 필드가 어노테이션보다 우선해요. | | No |
| entryPoints | 엔트리포인트 이름 목록이에요. | | No |
| routes | 라우트 목록이에요. | | Yes |
| routes[n].services | Kubernetes service 정의 목록이에요. ExternalName Service 설정에 대한 내용은 여기를 참고해 주세요. | | No |
| routes[n].services[n].name | Kubernetes service의 이름을 정의해요. | | Yes |
| routes[n].services[n].port | Kubernetes service의 포트를 정의해요. 명명된 포트에 대한 참조일 수 있어요. | | Yes |
| routes[n].services[n].weight | 서버 로드 밸런싱에 적용할 가중치를 정의해요. | 1 | No |
| routes[n].services[n].nativeLB | 로드 밸런서를 만들 때 LB의 자식이 파드 IP인지, 아니면 유일한 자식이 Kubernetes Service clusterIP인지 제어해요. | false | No |
| routes[n].services[n].nodePortLB | 서비스 타입이 NodePort일 때 로드 밸런서를 만들 때 LB의 자식이 nodePort를 사용하는 노드 내부 IP인지 제어해요. Traefik이 Kubernetes 클러스터 외부에 있지만 노드와 같은 네트워크 안에서 실행될 때 서비스에 도달할 수 있게 해 줘요. 자세한 내용은 여기를 참고해 주세요. | false | No |
ExternalName Service
Traefik 백엔드 생성은 포트가 설정되어야 하지만, Kubernetes ExternalName Service는 포트 없이 정의될 수 있어요. 따라서 Traefik은 다음과 같은 두 가지 방식으로 포트 정의를 지원해요:
-
IngressRouteUDP service에만 정의
-
양쪽 모두에 정의(포트가 일치하지 않으면 경고가 표시되고 IngressRouteUDP service 포트가 사용돼요)
따라서 양쪽에 포트가 정의된 경우 Traefik은 포트가 일치하기를 기대해요.
Resource에 포트가 정의된 경우
IngressRouteUDP
apiVersion: traefik.io/v1alpha1
kind: IngressRouteUDP
metadata:
name: test.route
namespace: apps
spec:
entryPoints:
- foo
routes:
- services:
- name: external-svc
port: 80
Service ExternalName
apiVersion: v1
kind: Service
metadata:
name: external-svc
namespace: apps
spec:
externalName: external.domain
type: ExternalName
Service에 포트가 정의된 경우
IngressRouteUDP
apiVersion: traefik.io/v1alpha1
kind: IngressRouteUDP
metadata:
name: test.route
namespace: apps
spec:
entryPoints:
- foo
routes:
- services:
- name: external-svc
Service ExternalName
apiVersion: v1
kind: Service
metadata:
name: external-svc
namespace: apps
spec:
externalName: external.domain
type: ExternalName
ports:
- port: 80
양쪽에 포트가 정의된 경우
IngressRouteUDP
apiVersion: traefik.io/v1alpha1
kind: IngressRouteUDP
metadata:
name: test.route
namespace: apps
spec:
entryPoints:
- foo
routes:
- services:
- name: external-svc
port: 80
Service ExternalName
apiVersion: v1
kind: Service
metadata:
name: external-svc
namespace: apps
spec:
externalName: external.domain
type: ExternalName
ports:
- port: 80
NativeLB
파드 IP로 서버 로드 밸런서를 만들지 않고 Kubernetes Service clusterIP를 직접 사용하려면 NativeLB 옵션을 true로 설정해야 해요. 기본적으로 NativeLB는 false예요.
IngressRouteUDP
apiVersion: traefik.io/v1alpha1
kind: IngressRouteUDP
metadata:
name: test.route
namespace: default
spec:
entryPoints:
- foo
routes:
- services:
- name: svc
port: 80
# Here, nativeLB instructs to build the servers load balancer with the Kubernetes Service clusterIP only.
nativeLB: true
Service
apiVersion: v1
kind: Service
metadata:
name: svc
namespace: default
spec:
type: ClusterIP
...