Ingress 설정

Ingress 리소스를 생성하여 Ingress 구성 요소를 구성하고, 요청 라우팅 규칙을 정의하며, 앱 서비스의 경로를 지정합니다. 노출하려는 앱이나 서비스가 포함된 각 네임스페이스마다 별도의 Ingress 리소스가 필요합니다.

시작하기 전에

시작하기 전에 다음 준비 단계를 따르세요.

  1. Ingress를 설정할 수 있는 적절한 권한이 있는지 확인하십시오. 다음과 같은 IBM Cloud IAM 역할이 필요합니다:

    • 클러스터에 대한 관리자 플랫폼 액세스 역할
    • 모든 네임스페이스의 관리자 서비스 액세스 역할
  2. IBM 에서 제공하는 Ingress 하위 도메인을 사용할지 여부를 결정하십시오. 제공된 서브도메인을 사용하지 않으려면, 직접 사용자 지정 도메인을 생성하고 등록해야 합니다.

    사설 ALB를 통해 앱을 노출하기 위해 필요한 사용자 지정 도메인 또는 IBM 에서 제공하는 도메인을 수동으로 구성해야 합니다.

  3. 사용할 ALB가 예상된 버전인지 확인하십시오. ibmcloud ks ingress alb versions 명령어를 실행하여 현재 지원되는 버전을 확인하고, 이를 ibmcloud ks ingress alb ls --cluster CLUSTER 명령어의 출력 결과와 비교해 보십시오. 이 문서를 참고하고 계신다면, Traefik 기반의 Ingress를 실행하고 계실 것으로 예상됩니다. Ingress- NGINX 에 대한 구체적인 안내는 해당 문서를 참조하시기 바랍니다.

  4. 비공개 ALB를 통해 앱을 노출하는 경우, CLI에서 각 비공개 ALB를 활성화해야 합니다. ALB ID를 확인하려면 ibmcloud ks ingress alb ls --cluster CLUSTER`` 명령을 실행하십시오.

클래식 클러스터 자세한 내용과 명령어 옵션은CLI 참조 문서를 참조하십시오. sh {: pre} ibmcloud ks ingress alb enable classic --alb ALB_ID --cluster CLUSTER_NAME VPC 클러스터 자세한 내용과 명령어 옵션은CLI 참조 문서를 참조하십시오. sh {: pre} ibmcloud ks ingress alb enable vpc-gen2 --alb ALB_ID --cluster CLUSTER_NAME

  1. 고가용성을 보장하고 정기적인 업데이트를 적용할 수 있도록, 클러스터에 각 존당 최소 두 개의 워커 노드가 포함되도록 하십시오. 존에 워커 노드가 하나뿐인 경우, ALB는 자동 업데이트를 수신할 수 없습니다. 자세한 내용은 ALB의 워커 노드 요구 사항을 참조하십시오.

  2. 클래식 클러스터를 사용하는 경우, ‘ IBM Cloud ’ 인프라 계정에 대해 VRF(Virtual Router Function) 를 활성화하십시오.

    • VRF를 사용으로 설정하려면 VRF 사용을 참조하십시오.
    • VRF가 이미 사용으로 설정되었는지 확인하려면 ibmcloud account show 명령을 사용하십시오.
    • VRF를 활성화할 수 없거나 활성화하고 싶지 않은 경우, VLAN 스패닝을 활성화하십시오. VRF 또는 VLAN Spanning이 사용으로 설정된 경우, ALB가 패킷을 계정의 다양한 서브넷으로 라우팅할 수 있습니다.
  3. VPC 클러스터의 경우, VPC 보안 그룹이 Ingress를 통해 라우팅되는 트래픽 요청을 노드 포트가 수신할 수 있도록 허용하는지 확인하십시오. 자세한 내용은 ‘기본적으로 보안이 적용된 클러스터 VPC 네트워킹 이해’를 참조하십시오.

  4. 자동화 또는 테스트 등의 이유로 7일 내에 동일하거나 유사한 이름의 클러스터를 5회 이상 작성하고 삭제하는 경우에는 Let's Encrypt 중복 인증서 속도 한계에 도달할 수 있습니다. Ingress 서브도메인 및 인증서가 올바르게 등록되도록 하기 위해, 클러스터 이름의 처음 24자는 서로 달라야 합니다.

  5. 에지 작업자 노드로 네트워크 트래픽을 제한하는 경우에는 ALB가 균등하게 배치되도록 각 구역에서 최소한 두 개의 에지 작업자 노드가 사용으로 설정되었는지 확인하십시오.

구역에서 장애가 발생하는 경우, 해당 구역의 Ingress ALB에 대한 요청에서 간헐적인 장애가 나타날 수 있습니다.

설정 단계

다음 단계를 따라 Ingress를 설정하세요.

1단계: ‘ ClusterIP ’ 서비스 생성하기

노출할 각 앱 배치에 대해 Kubernetes ClusterIP 서비스를 작성하십시오. Ingress 로드 밸런싱에 포함하려면 앱을 Kubernetes 서비스에서 노출해야 합니다.

kubectl expose deploy <app_deployment_name> --name my-app-svc --port <app_port> -n <namespace>

2단계: TLS 인증서와 Kubernetes 시크릿을 사용하여 TLS 종단 설정을 구성합니다

TLS 인증서는 앱이 있는 각 네임스페이스에 ‘ Kubernetes ’ 비밀로 저장되어 있어야 합니다.

3단계: Ingress 리소스 작성

Ingress 리소스를 생성하여 Ingress 컨트롤러가 앱 서비스로 트래픽을 라우팅하는 데 사용하는 라우팅 규칙을 정의합니다.

  1. YAML 파일에 Ingress 리소스를 생성합니다.

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: my-ingress-resource
    spec:
      ingressClassName: public-iks-traefik
      tls:
      - hosts:
        - <domain_name>
        secretName: <tls_secret_name>
      rules:
      - host: HOSTNAME
        http:
          paths:
          - path: <app_path_1>
            pathType: Prefix
            backend:
              service:
                name: <app_service_1>
                port:
                  number: 80
          - path: <app_path_2>
            pathType: Prefix
            backend:
              service:
                name: <app_service_2>
                port:
                  number: 80
    

리소스 필드

ingressClassName
Ingress 클래스 이름. IBM 에서 제공하는 Ingress 클래스는 공용 ALB의 경우 public-iks-traefik, 사설 ALB의 경우 private-iks-traefik 입니다.
tls.hosts
TLS를 사용하려면 <domain>을(를) IBM에서 제공하는 Ingress 하위 도메인 또는 사용자 정의 도메인으로 바꾸십시오.
tls.secretName
<tls_secret_name>TLS 인증서가 저장된 Kubernetes 시크릿의 이름으로 바꾸십시오.
host
<domain>을 IBM 제공 Ingress 하위 도메인 또는 사용자 정의 도메인으로 대체하십시오.
path
<app_path>를 슬래시 또는 앱이 청취 중인 경로로 대체하십시오. 이 경로는 지정된 Ingress 도메인에 추가되어 앱으로 연결되는 고유한 경로를 생성합니다. 이 라우트를 웹 브라우저에 입력하면 네트워크 트래픽이 애플리케이션 ALB로 라우팅됩니다. ALB는 연관된 서비스를 찾고 네트워크 트래픽을 이 서비스에 전송합니다. 그 후 이 서비스는 트래픽을 앱이 실행되는 팟(Pod)에 전달합니다.
pathType
URL 경로 일치 방법입니다. 지원되는 값은 ImplementationSpecific, Exact 또는 Prefix입니다. 각 경로 유형에 대한 자세한 내용과 예시는 커뮤니티의 ‘ Kubernetes ’ 문서를 참조하십시오.
service.name
app1_serviceapp2_service 등을 앱을 노출하기 위해 작성한 서비스의 이름으로 대체하십시오. 지정하는 앱들이 모두 동일한 네임스페이스에 속해 있는지 확인하십시오.
service.name
<app1_service><app2_service> 등을 앱을 노출하기 위해 작성한 서비스의 이름으로 대체하십시오. 지정하는 앱들이 모두 동일한 네임스페이스에 속해 있는지 확인하십시오.
service.port.number
서비스가 청취하는 포트입니다. 앱에 대한 Kubernetes 서비스를 작성했을 때 정의한 동일한 포트를 사용하십시오.
  1. Ingress 리소스를 클러스터에 적용하세요. 리소스가 리소스에 정의한 앱 서비스와 동일한 네임스페이스에 배치되는지 확인하십시오.
    kubectl apply -f community-ingress-resource.yaml -n <namespace>
    

4단계: Ingress 설정 확인하기

  1. ALB 목록을 확인하고, ‘ Kubernetes ’ Ingress 이미지를 실행 중인 ALB 중 하나의 IP 주소(클래식) 또는 호스트 이름(VPC)을 복사하십시오. 출력에서 <community_version>_<ibm_build>_iks 형식의 빌드가 있는 ALB를 선택하십시오.

    ibmcloud ks ingress alb ls -c CLUSTER
    
  2. ALB의 IP 주소(클래식) 또는 호스트 이름(VPC), 앱 경로, 그리고 귀하의 도메인을 사용하여 이 ALB를 통해 앱으로 트래픽을 성공적으로 전송할 수 있는지 확인하십시오.

    curl http://<ALB_IP>/<app_path> -H "Host: <ingress_subdomain>"
    

    예를 들어, 기본 Ingress 하위 도메인을 사용하여 myapp 이라는 앱에 요청을 보내려면 다음 명령어를 실행하십시오.

    curl http://169.X.X.X/myapp -H "Host: mycluster-a1b2cdef345678g9hi012j3kl4567890-0000.us-south.containers.appdomain.cloud"
    

Ingress를 통해 앱에 연결하는 데 문제가 있습니까? Ingress 문제점 해결을 시도하십시오. ibmcloud ks ingress status-report get -c CLUSTER_NAME_OR_ID을(를) 실행하여 Ingress 컴포넌트의 상태를 확인할 수 있습니다.

Traefik CRD

Kubernetes 의 Ingress 관련 자료와 함께. Traefik 기반 인그레스 컨트롤러를 사용하면 Traefik의 사용자 정의 리소스 정의(CRD)로 정의된 리소스를 활용할 수 있습니다. Traefik 기반 ALB가 활성화되면 필요한 CRD가 클러스터에 자동으로 배포됩니다. 배포된 CRD 버전은 항상 배포된 Traefik ALB의 최신 버전과 일치합니다. 커스텀 리소스에 대한 자세한 내용은 Traefik 문서에서 확인할 수 있습니다.

때로는 구성에 따라 Traefik CR에서 엔트리포인트 이름을 지정해야 할 수도 있습니다. IBM Cloud Kubernetes Service 에서 엔트리포인트의 기본 이름은, 일반 텍스트(cleartext) HTTP 의 경우 web (기본적으로 포트 80 에 바인딩됨), TLS 로 암호화된 HTTPS 트래픽의 경우 websecure (기본적으로 포트 443 에 바인딩됨)입니다. 애플리케이션에 필요한 경우 포트를 구성하거나 추가 엔트리포인트를 생성할 수 있습니다.

Traefik에서 Ingress- NGINX 어노테이션 지원

Traefik은 Ingress( NGINX ) 고유의 어노테이션을 처리하는 호환성 레이어를 제공합니다. IBM Cloud Kubernetes Service 에서는 이 기능이 기본적으로 비활성화되어 있습니다. 이 기능을 활성화하면 Traefik 전용 어노테이션 처리가 비활성화되므로, ALB에서는 Ingress( NGINX ) 전용 어노테이션만 처리됩니다. ingressProvider 옵션은 ibm-ingress-deploy-config ConfigMap 이 옵션을 사용하여 이 기능을 켜거나 끌 수 있습니다.

어노테이션에 대한 지원 현황에 대한 자세한 내용은 Traefik 문서를 참조하십시오.

Ingress를 사용한 사용자 지정 도메인

IBM 에서 제공하는 Ingress 하위 도메인을 사용하지 않으려면, Ingress 리소스에 직접 지정한 사용자 지정 도메인을 사용할 수 있습니다. 사설 ALB를 통해 Ingress로 노출된 앱의 경우, 사용자 지정 도메인이 필요하거나 IBM 에서 제공하는 도메인을 수동으로 구성해야 한다는 점에 유의하십시오.

공개 ALB용 사용자 지정 도메인 생성

다음 단계를 따라 공용 ALB용 사용자 지정 도메인을 생성하십시오.

  1. 사용자 정의 도메인을 작성하십시오. 사용자 정의 도메인을 등록하려면 DNS(Domain Name Service) 제공자 또는 IBM Cloud DNS를 통해 작업하십시오. Ingress에서 노출할 앱이 하나의 클러스터의 여러 네임스페이스에 있는 경우 사용자 정의 도메인을 와일드카드 도메인(예: *.custom_domain.net)으로 등록하십시오. Kubernetes 버전 1.20 이상에서는 도메인 길이가 130자 이하로 제한된다는 점에 유의하십시오.

  2. 표준 이름 레코드(CNAME)로 IBM 제공 도메인을 지정하여 사용자 정의 도메인의 별명을 정의하십시오. IBM 제공 Ingress 도메인을 찾으려면 ibmcloud ks cluster get --cluster CLUSTER_NAME을 실행하고 Ingress subdomain 필드를 찾으십시오.

    IBM 에서 제공하는 서브도메인을 CNAME으로 지정해야만, 자동 상태 점검을 통해 오류가 발생한 IP를 DNS 응답에서 제거하고, ALB를 추가하거나 제거할 때 사용자 지정 도메인이 정상적으로 업데이트될 수 있습니다.

비공개 ALB용 사용자 지정 도메인 생성

다음 단계를 따라 비공개 ALB용 사용자 지정 도메인을 생성하십시오. 사설 ALB와 함께 Ingress를 사용하려면 사용자 지정 도메인이 필요하다는 점에 유의하십시오.

프라이빗 VLAN만 있는 클래식 클러스터를 사용하는 경우, 먼저 자체 사설 네트워크에서 이용할 수 있는 DNS 서비스 을 구성해야 합니다.

  1. DNS 서비스 제공자를 통해 사용자 정의 도메인을 작성하십시오. Ingress URL은 130자 이내여야 한다는 점에 유의하십시오.

  2. IP 주소를 A 레코드(클래식 클러스터)로 추가하거나 해당 VPC 호스트 이름을 CNAME(VPC 클러스터)으로 추가하여 사용자 정의 도메인을 사설 ALB에 맵핑하십시오. ALB IP 주소(클래식) 또는 호스트 이름(VPC)을 찾으려면 ibmcloud ks ingress alb ls -c CLUSTER_NAME_OR_ID을(를) 실행하십시오.