
기본 구성
이 문서의 예는 Ingress 리소스 정의 및 기본 구성 을 보여줍니다.
아래 예시는 기본 Ingress 리소스 정의를 보여줍니다. 이는 cafe.example.com
에서 호스팅되는 가상의 cafe 애플리케이션을 구성하는 두 가지 서비스(coffe와 tea)에 대한 요청의 Load Balancing합니다.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: cafe-ingress
spec:
tls:
- hosts:
- cafe.example.com
secretName: cafe-secret
rules:
- host: cafe.example.com
http:
paths:
- path: /tea
pathType: Prefix
backend:
service:
name: tea-svc
port:
number: 80
- path: /coffee
pathType: Prefix
backend:
service:
name: coffee-svc
port:
number: 80
다음은 이 Ingress 리소스 정의의 의미에 대한 분석입니다.
metadata.name
필드는 리소스cafe‑ingress
의 이름을 정의합니다spec.tls
필드에서 SSL/TLS Termination를 설정합니다.secretName
에서 우리는cafe‑secret
이라는 이름으로 Secret 리소스를 참조합니다. Secret은 Ingress와 동일한 Namespace에 속해야 하며kubernetes.io/tls
유형이어야 하며 여기에 설명된 대로 인증서와 개인 Key를 보유하는tls.crt
및tls.key
라는 이름의 Key를 포함해야 합니다. Secret이 존재하지 않거나 유효하지 않은 경우 NGINX는 Secret이 적용되는 호스트에 대한 TLS 연결 설정 시도를 중단합니다.
필드에서 인증서와 Key를hosts
cafe.example.com
호스트에 적용합니다.
spec.rules
필드에서 도메인 이름이cafe.example.com
인 호스트를 정의합니다.paths
필드에서 두 가지 경로 기반 규칙을 정의합니다./tea
경로가 있는 규칙은 클러스터에서 이름이tea‑svc
로 배포된 tea 서비스의 Pod 간에/tea
URI가 있는 요청을 배포하도록 NGINX에 지시합니다./coffee
경로가 있는 규칙은 NGINX가/coffee
URI가 있는 요청을 클러스터에서coffee‑svc
라는 이름으로 배포된 Coffee 서비스의 Pod 간에 배포하도록 지시합니다.- 두 규칙 모두 NGINX가 해당 서비스의
포트 80
(servicePort
필드)에 요청을 배포하도록 지시합니다.
클러스터에 Ingress 및 Secret 리소스를 배포하는 방법에 대한 전체 지침은 GitHub repo의 전체 예제를 참조하세요.
Ingress 리소스에 대해 자세히 알아보려면 Kubernetes 문서에서 Ingress 리소스 문서를 참조하십시오.
목차
1. Kubernetes 1.18 이상에서 사용할 수 있는 새로운 기능
2. 제한사항
3. 고급 구성
1. Kubernetes 1.18 이상에서 사용할 수 있는 새로운 기능
Kubernetes 1.18부터 다음과 같은 새로운 기능을 사용할 수 있습니다.
- 호스트 필드는
*.example.com
과 같은 와일드카드(Wildcard) 도메인 이름을 지원합니다. - 경로는 다음 값을 사용하는 새 필드
PathType
을 사용하여 다양한 Matching 규칙을 지원합니다. Prefix-based Matching의 경우Prefix
, 정확한 Matching일 경우Exact
및 기본 유형인Prefix
와 동일한 ImplementationSpecific 값을 사용합니다.
- path: /tea
pathType: Prefix
backend:
serviceName: tea-svc
servicePort: 80
- path: /tea/green
pathType: Exact
backend:
service:
name: tea-svc
port:
number: 80
- path: /coffee
pathType: ImplementationSpecific
backend:
service:
name: coffee-svc
port:
number: 80
- 이제
ingressClassName
필드가 지원됩니다.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: cafe-ingress
spec:
ingressClassName: nginx
tls:
- hosts:
- cafe.example.com
secretName: cafe-secret
rules:
- host: cafe.example.com
. . .
이 필드를 사용할 때 해당 name
으로 IngressClass
리소스를 생성해야 합니다. 공통 리소스 생성 섹션의 3단계 IngressClass 리소스 생성을 참조하십시오.
2. 제한사항
NGINX Ingress Controller는 Ingress 리소스에 다음과 같은 제한을 적용합니다.
- Ingress 리소스를 정의할 때
host
필드는 필수입니다. - Ingress 리소스가 병합 가능한 최소값이 아닌 한
host
값은 모든 Ingress 및 VirtualServer 리소스 간에 고유해야 합니다. 호스트 및 Listener 충동 처리를 참조하십시오. spec.rules[].http.paths[]
의path
필드는 필수입니다.
3. 고급 구성
Ingress 리소스는 기본 NGINX 기능(호스트 및 경로 기반 라우팅, TLS Termination)만 사용할 수 있도록 허용합니다. Request URI 재작성 또는 응답 헤더 추가 삽입과 같은 고급 기능은 Annotations을 통해 사용할 수 있습니다.
Ingress Controller는 구성 옵션이 포함된 템플릿 파일을 실행하여 NGINX 구성을 생성합니다. 이러한 옵션은 수신 리소스 및 Ingress Controller의 ConfigMap을 통해 설정됩니다. 생성된 NGINX 구성에 대해 더 많은 제어가 필요한 고급 NGINX 사용자는 Snippet을 사용하여 Raw NGINX 구성을 삽입할 수 있습니다. 자세한 내용은 스니펫을 사용한 고급 구성을 참조하십시오. 또한 템플릿을 사용자 정의할 수 있습니다. 지침은 사용자 정의 템플릿을 참조하십시오.