기본 구성
이 문서의 예는 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를hostscafe.example.com호스트에 적용합니다.
spec.rules필드에서 도메인 이름이cafe.example.com인 호스트를 정의합니다.paths필드에서 두 가지 경로 기반 규칙을 정의합니다./tea경로가 있는 규칙은 클러스터에서 이름이tea‑svc로 배포된 tea 서비스의 Pod 간에/teaURI가 있는 요청을 배포하도록 NGINX에 지시합니다./coffee경로가 있는 규칙은 NGINX가/coffeeURI가 있는 요청을 클러스터에서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 구성을 삽입할 수 있습니다. 자세한 내용은 스니펫을 사용한 고급 구성을 참조하십시오. 또한 템플릿을 사용자 정의할 수 있습니다. 지침은 사용자 정의 템플릿을 참조하십시오.