카테고리 없음

Ingress 리소스 241231

mezzanineX 2024. 12. 31. 17:54

q1: Ingress 리소스

a1:

Ingress 리소스는 Kubernetes 클러스터 내에서 HTTP 및 HTTPS 트래픽을 처리하고, 외부 클라이언트의 요청을 내부 서비스로 라우팅하는 규칙을 정의하는 API 객체입니다. Ingress 리소스를 사용하면 클러스터 외부에서 들어오는 웹 트래픽을 어떻게 처리할지에 대한 구체적인 규칙을 설정할 수 있습니다. 이 규칙은 Ingress Controller가 실행되면서 실제로 적용되어 외부 요청을 지정된 서비스로 라우팅합니다.

Ingress 리소스의 주요 역할
1. 외부 HTTP/HTTPS 요청 라우팅:
• 클라이언트(예: 웹 브라우저, 모바일 앱)로부터 들어오는 HTTP(S) 요청을 Kubernetes 클러스터 내의 여러 서비스로 라우팅합니다. 예를 들어, example.com/api와 같은 URL 경로를 api-service로 라우팅하고, example.com/frontend를 frontend-service로 라우팅할 수 있습니다.
2. URL 경로 기반 라우팅:
• URL 경로와 호스트 이름에 따라 요청을 특정 서비스로 라우팅할 수 있습니다. 예를 들어, /api/* 요청을 api-service로, /frontend/* 요청을 frontend-service로 전달할 수 있습니다.
3. TLS/SSL 설정:
• HTTPS 요청을 처리하기 위한 SSL 인증서와 관련된 설정을 포함할 수 있습니다. 이를 통해 Ingress 리소스는 보안된 연결을 처리하고, 내부 서비스로의 트래픽을 안전하게 전달합니다.
4. 로드 밸런싱:
• 여러 인스턴스가 있는 서비스에 대해 로드 밸런싱을 지원합니다. Ingress Controller는 트래픽을 균등하게 분배하여 서버의 부하를 고르게 유지할 수 있습니다.
5. 트래픽 관리:
• Ingress 리소스를 통해 트래픽 속도 제한, 접근 제어, CORS 설정, 인증 및 권한 부여 등의 기능을 관리할 수 있습니다.

Ingress 리소스 구성

Ingress 리소스는 apiVersion, kind, metadata, spec 필드를 포함한 YAML 형식으로 정의됩니다.

예시:

apiVersion: networking.k8s.io/v1  # API 버전
kind: Ingress  # 리소스 종류
metadata:
  name: my-ingress  # Ingress 이름
  namespace: default  # 네임스페이스
spec:
  rules:  # 규칙 정의
    - host: example.com  # 요청받을 도메인
      http:
        paths:
          - path: /api/*  # /api로 시작하는 경로에 대한 규칙
            pathType: Prefix  # 경로의 접두사 일치
            backend:
              service:
                name: api-service  # 요청을 라우팅할 서비스 이름
                port:
                  number: 80  # 서비스의 포트 번호
          - path: /frontend/*  # /frontend로 시작하는 경로에 대한 규칙
            pathType: Prefix
            backend:
              service:
                name: frontend-service  # 요청을 라우팅할 서비스 이름
                port:
                  number: 80
  tls:  # HTTPS를 위한 TLS 설정
    - hosts:
        - example.com  # TLS 인증서를 적용할 도메인
      secretName: example-tls  # 인증서가 저장된 시크릿 이름

Ingress 리소스의 주요 요소
1. rules:
• 클러스터 외부에서 들어오는 요청을 라우팅할 규칙을 정의합니다.
• host: 요청을 받을 도메인 이름입니다. 예를 들어, example.com과 같은 호스트 이름에 대한 요청을 처리합니다.
• http: HTTP 요청에 대한 규칙을 정의합니다. 이곳에서 paths 배열을 사용하여 요청 경로별로 라우팅할 서비스를 설정합니다.
• path: URL 경로를 지정합니다. 예를 들어, /api/*는 /api로 시작하는 모든 경로를 라우팅합니다.
• pathType: 경로 일치 방법을 지정합니다. Prefix는 접두사 기반 경로 일치를 의미합니다.
2. tls:
• HTTPS 요청을 처리하는 설정입니다. secretName에 지정된 Kubernetes Secret에 저장된 SSL/TLS 인증서를 사용하여 보안 연결을 처리합니다.
• 이 설정을 사용하면, 클러스터 외부의 클라이언트와 Ingress Controller 간의 통신을 암호화된 HTTPS로 처리할 수 있습니다.
3. backend:
• 요청을 처리할 서비스와 그 서비스의 포트를 지정합니다. Ingress는 요청을 특정 서비스로 라우팅할 때, 해당 서비스의 name과 port를 지정하여 정확한 라우팅을 수행합니다.

Ingress 리소스의 동작 흐름
1. 클라이언트가 외부에서 HTTP 또는 HTTPS 요청을 보내면, Ingress Controller가 해당 요청을 수신합니다.
2. Ingress Controller는 Ingress 리소스에 정의된 규칙을 기반으로 요청을 처리합니다.
3. 요청된 URL의 경로와 호스트를 확인하여, 해당하는 서비스로 요청을 라우팅합니다.
4. 라우팅된 서비스는 요청을 처리하고, Ingress Controller는 응답을 클라이언트에게 반환합니다.

Ingress Controller와의 관계
• Ingress 리소스는 Ingress Controller가 해석하고 실행하는 규칙입니다.
• Ingress Controller는 Ingress 리소스에 정의된 라우팅 규칙을 실제로 구현하여 외부 트래픽을 내부 서비스로 전달합니다.

Ingress 리소스를 사용하는 이유
• 트래픽 라우팅 관리: 여러 서비스에 대한 HTTP(S) 요청을 중앙에서 관리할 수 있습니다.
• 보안: SSL 종료를 Ingress Controller에서 처리함으로써 내부 서비스는 HTTPS를 처리할 필요가 없게 됩니다.
• 유연성: URL 경로와 호스트 기반으로 다양한 서비스에 대한 라우팅을 쉽게 설정할 수 있습니다.
• 확장성: 여러 서비스에 대한 트래픽을 한 곳에서 관리하고 로드 밸런싱을 적용할 수 있습니다.

결론

Ingress 리소스는 Kubernetes 클러스터 외부에서 내부 서비스로 HTTP(S) 요청을 라우팅하는 규칙을 정의하는 중요한 객체입니다. 이를 통해 웹 애플리케이션의 트래픽을 효율적으로 관리하고, 보안을 강화하며, 다양한 라우팅 규칙을 설정할 수 있습니다. Ingress Controller는 이러한 규칙을 실제로 실행하여 트래픽을 서비스로 전달합니다.

반응형