VPC 클러스터에서 아웃바운드 트래픽 보호 관리

가상 사설 클라우드4.15 이상

Red Hat OpenShift on IBM Cloud VPC 클러스터에서 아웃바운드 트래픽 보호를 관리하기 위한 다음 옵션을 검토하세요. 모든 아웃바운드 액세스를 허용하거나 앱에 필요한 구성 요소에 대한 아웃바운드 트래픽만 선택적으로 허용할 수 있습니다.

다음 시나리오 중 대부분에서는 kube-<clusterID> 보안 그룹에 사용자 지정 규칙을 추가하여 특정 리소스에 대한 아웃바운드 트래픽을 허용하는 방법이 있습니다. 나중에 ibmcloud oc security-group reset 실행하면 kube-<clusterID> 보안 그룹에 추가한 규칙이 제거됩니다. 보안 그룹을 재설정하면 기본 규칙이 복원되고 추가한 규칙은 제거됩니다.

아웃바운드 트래픽 보호 비활성화

가상 사설 클라우드4.15 이상

새 클러스터에 대한 아웃바운드 트래픽 보호를 비활성화하기 위한 다음 옵션을 검토하세요.

outbound traffic protection enabledisable 명령을 사용하여 아웃바운드 트래픽 보호를 켜거나 끌 수 있습니다. 모든 아웃바운드 트래픽을 허용하지 않게 되면 두 가지 구성 간에 전환하는 것이 좋습니다.

옵션 1: 클러스터를 생성할 때 아웃바운드 트래픽 보호 비활성화

이 옵션을 선택하면 모든 아웃바운드 네트워크 연결이 허용됩니다.

  • 콘솔에서 아웃바운드 트래픽 허용 옵션을 선택합니다.
  • CLI에서 cluster create vpc-gen2 명령을 사용하여 클러스터를 생성할 때 --disable-outbound-traffic-protection 옵션을 지정하세요.
  • Terraform에서 disable_outbound_traffic_protection = true 옵션을 지정하세요.
  • API에서 disableOutboundTrafficProtection=true 옵션을 지정하세요.

옵션 2: 사용자 지정 보안 그룹을 통한 아웃바운드 트래픽 허용

클러스터를 만들기 전에 클러스터가 액세스해야 하는 외부 사이트나 서비스에 액세스할 수 있도록 VPC에 사용자 지정 보안 그룹을 만듭니다. 그런 다음 클러스터를 생성하는 동안 이 보안 그룹을 클러스터에 연결합니다.

  • 콘솔에서 사용자 지정 보안 그룹을 지정합니다.
  • CLI에서 cluster create vpc-gen2 명령을 사용하여 클러스터를 생성할 때 --cluster-security-group <security-group-ID> 옵션을 지정하고 사용자 지정 보안 그룹 ID를 포함합니다.
  • Terraform에서 security_groups 옵션을 지정하고 사용자 지정 그룹을 포함합니다.

기존 클러스터에 대한 아웃바운드 트래픽 보호 비활성화

가상 사설 클라우드4.15 이상

클러스터를 프로비저닝한 후 아웃바운드 트래픽 보호를 비활성화하기 위한 옵션을 검토하세요.

옵션 1: CLI에서 아웃바운드 트래픽 보호 비활성화

이 옵션을 선택하면 모든 외부 네트워크 연결이 허용됩니다.

ibmcloud oc vpc outbound-traffic-protection disable --cluster CLUSTER

옵션 2: 기본 클러스터 워커 보안 그룹에 보안 그룹 규칙 추가

클러스터 워커 보안 그룹( kube-<clusterID> )에 특정 외부 사이트에 대한 액세스를 허용하는 보안 그룹 규칙을 추가할 수 있습니다. 클러스터가 액세스해야 하는 각 사이트나 서브넷에 대해 이 단계를 반복합니다. 자세한 내용은 아웃바운드 트래픽을 선택적으로 허용하는 예제 시나리오를 참조하세요.

ibmcloud is sg-rulec kube-CLUSTERID outbound icmp_tcp_udp --remote IP-ADDRESS-OR-SUBNET

기존 클러스터에 대한 아웃바운드 트래픽 보호 활성화

가상 사설 클라우드4.15 이상

기존 4.15 클러스터에 대한 아웃바운드 보호를 활성화하려면 다음 명령을 실행하세요. 아웃바운드 트래픽 보호를 활성화하면 모든 아웃바운드 트래픽이 차단됩니다.

ibmcloud oc vpc outbound-traffic-protection enable --cluster CLUSTER

아웃바운드 트래픽을 선택적으로 허용하는 예시 시나리오

quay.io 과 같은 외부 컨테이너 레지스트리, Red Hat Marketplace, OperatorHub 등의 공통 리소스와 구성 요소에 대한 아웃바운드 트래픽을 허용하는 방법에 대한 지침은 다음 섹션을 검토하세요. 사용자 지정 보안 그룹 규칙을 만들어 아웃바운드 트래픽을 선택적으로 허용하는 경우 ibmcloud oc security-group reset 명령을 실행하여 보안 그룹을 기본 설정으로 재설정하면 변경 사항이 제거됩니다.

DockerHub 또는 quay.io 과 같은 외부 컨테이너 레지스트리에서 이미지 액세스

DockerHub 또는 quay.io 또는 registry.redhat.com 와 같은 레지스트리에서 이미지에 액세스하려면 다음 옵션 중 하나를 선택하세요.

  • 아웃바운드 트래픽 보호를 비활성화합니다.
    ibmcloud oc vpc outbound-traffic-protection disable --cluster CLUSTER
    
  • 앱에 필요한 이미지를 icr.io 로 미러링합니다. 해당 이미지를 끌어와서 태그를 지정하고 IBM Cloud Container Registry 으로 푸시합니다. 자세한 내용은 IBM Cloud Container Registry 에 이미지 푸시를 참조하세요.

Red Hat Marketplace 및 OperatorHub 에 대한 아웃바운드 트래픽 허용

다음 단계에서는 모든 아웃바운드 트래픽을 활성화합니다. 이 기능을 활성화하고 싶지 않다면, 앱에 필요한 Red Hat Marketplace 및 OperatorHub 이미지와 동일한 내용을 반영하십시오 을 자신의 icr.io 으로 변경하면 됩니다.

  1. 아웃바운드 트래픽 보호를 비활성화합니다.

    ibmcloud oc vpc outbound-traffic-protection disable --cluster CLUSTER
    
  2. 클러스터에서 OperatorHub 패치를 적용하여 Pod가 시작될 수 있도록 하세요.

    oc patch OperatorHub cluster --type json -p '[{"op": "remove", "path": "/spec/disableAllDefaultSources"}]'
    

나중에 이러한 변경 사항을 되돌리고 OperatorHub, 비활성화하려면 다음 단계를 완료하세요.

  1. 아웃바운드 트래픽 보호를 활성화합니다.

    ibmcloud oc vpc outbound-traffic-protection enable --cluster CLUSTER
    
  2. 클러스터에서 OperatorHub 패치를 적용하여 Pod를 비활성화하세요.

    oc patch OperatorHub cluster --type json -p '[{"op": "add", "path": "/spec/disableAllDefaultSources", "value": true}]'
    

이미지 스트림에 아웃바운드 트래픽 허용

클러스터에서 이미지 스트림에 액세스하려면 다음 옵션 중에서 선택하세요.

  • 필요한 이미지를 icr.io 레지스트리로 미러링합니다. 자세한 내용은 IBM Cloud Container Registry 에 이미지 푸시를 참조하세요.

  • 아웃바운드 트래픽 보호를 비활성화합니다.

    ibmcloud oc vpc outbound-traffic-protection disable --cluster CLUSTER
    
  • 사용하려는 이미지 스트림의 IP 주소에 kube-<clusterID> 보안 그룹에 보안 그룹 규칙을 추가합니다. 이미지 스트림의 IP 주소는 변경될 수 있습니다.

    ibmcloud is sg-rulec kube-vpegw-<clusterID> inbound tcp --port-min PORT  --port-max PORT --remote IP-OR-CIDR
    

Telemetry를 사용하여 원격 상태 모니터링을 위한 아웃바운드 트래픽 허용

원격 상태 모니터링을 허용하려면 다음 명령을 실행하여 아웃바운드 트래픽 보호를 비활성화해야 합니다.

ibmcloud oc vpc outbound-traffic-protection disable --cluster CLUSTER

VPE를 통해 4.15 클러스터 및 웹 콘솔에 액세스

Kubernetes 구성하여 개인 VPE 게이트웨이를 통해 클러스터 액세스를 허용할 수 있습니다. 이 옵션은 개인 전용 VPC 클러스터와 공개 및 개인 VPC 클러스터 모두에서 사용할 수 있습니다. 개인 엔드포인트를 통해 액세스하므로 고객은 클러스터에 액세스하기 위해 클라이언트에서 VPC로 VPN을 설정해야 합니다.

4.15 클러스터부터 VPE 액세스가 작동하려면 추가 보안 그룹 규칙이 필요합니다. 추가 보안 그룹 규칙은 개인 전용 클러스터와 공개 및 개인 엔드포인트가 있는 클러스터 모두에 필요합니다.

  1. VPN 서버를 나열하세요.

    ibmcloud is vpn-servers
    
  2. VPN 서버의 세부정보를 얻으세요.

    ibmcloud is vpn-server SERVER
    
  3. VPN 서버의 클라이언트 IP 풀을 가져옵니다.

    ibmcloud is vpn-server | grep "Client IP pool"
    
  4. 클러스터의 세부 정보를 얻고 VPE 포트를 기록하세요.

    ibmcloud ks cluster get --cluster CLUSTERID
    
  5. 클라이언트에서 VPN을 시작합니다.

  6. VPE를 통해 클러스터에 액세스하세요.

    ibmcloud ks cluster config --admin --cluster CLUSTERID --endpoint vpe
    
  7. 팟(Pod)을 나열합니다. 이 명령은 클라이언트가 VPE 게이트웨이를 사용하여 VPN을 통해 클러스터에 액세스할 수 없기 때문에 실패합니다.

    kubectl get pods -A
    
  8. VPN의 kube-vpegw-<clusterID> 에 보안 그룹 규칙을 추가합니다. 이 경우 원격은 VPN의 클라이언트 IP CIDR에서 나옵니다.

    ibmcloud is sg-rulec kube-vpegw-<clusterID> inbound tcp --port-min PORT  --port-max PORT --remote IP-OR-CIDR
    

    명령 예.

    ibmcloud is sg-rulec kube-vpegw-<clusterID> inbound tcp --port-min 30829  --port-max 30829 --remote 192.168.192.0/22
    
  9. 팟(Pod)을 나열합니다.

    kubectl get pods -A
    

웹후크에 대한 아웃바운드 트래픽 허용

URL 또는 클러스터 외부 서비스에 연결하는 웹훅을 사용하는 경우, 클러스터 작업자의 아웃바운드 트래픽을 URL 또는 외부 서비스로 허용하는 보안 그룹 규칙을 추가해야 합니다. 혹은 아웃바운드 트래픽 보호를 완전히 비활성화할 수도 있습니다.

일반적으로 클러스터 서비스 참조를 사용하는 입장 웹훅은 어떠한 변경도 필요하지 않습니다.

다음 예에서 클러스터 서비스에 연결하는 승인 웹훅은 일반적으로 어떠한 변경도 필요하지 않습니다. 그 이유는 마스터가 기본적으로 허용되는 Konnectivity 연결을 통해 서비스에 연결하기 때문입니다. 한 가지 예외는 해당 클러스터 서비스를 구현하는 파드가 URL 또는 일부 외부 서비스에 연결해야 하는 경우입니다. 그렇다면 이 예시와 같이 해당 파드가 URL 또는 외부 서비스에 액세스할 수 있도록 허용합니다.

apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingWebhookConfiguration
metadata:
  name: my-cluster-service.webhook.io
webhooks:
- admissionReviewVersions:
  - v1
  clientConfig:
    caBundle: ABCDEFG...
    service:
      name: my-admission-webhook
      namespace: default
      path: /validate
      port: 443
...

그러나 입학 웹훅에서 URL 을 사용하는 경우 추가 보안 그룹 규칙이 필요합니다.

URL 에 연결되는 웹훅 예시.

apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingWebhookConfiguration
metadata:
  name: my-url.webhook.io
webhooks:
- admissionReviewVersions:
  - v1
  clientConfig:
    caBundle: ABCDEFG...
    url: https://webhook.ibm.com:20001/validate
...

웹훅의 외부 URL 또는 서비스에 대한 액세스를 허용하려면 다음 옵션 중 하나를 선택할 수 있습니다

  • 다음 명령을 실행하여 아웃바운드 트래픽 보호를 비활성화합니다.

    ibmcloud oc vpc outbound-traffic-protection disable --cluster CLUSTER
    
  • 클러스터 워커가 연결할 수 있도록 kube-<clusterID> 보안 그룹에 아웃바운드 보안 그룹 규칙을 추가합니다. 이전 예에서는 포트 20001webhook.ibm.com 서비스가 사용되었습니다.

    1. dig 을 사용하여 액세스하려는 URL 의 IP를 조회합니다.
        dig +short URL
        ```
        명령 예.
        ```sh {: pre}
        dig +short webhook.ibm.com
        ```
        출력 예
        ```sh {: screen}
        1.2.3.4
        4.5.6.7
        ```
    1. 반환된 각 IP 주소에 대한 규칙을 만듭니다.
    
    ```sh {: pre}
        ibmcloud is sg-rulec kube-<clusterID> outbound icmp_tcp_udp --remote <IP-address-or-subnet>
        ```
        예제 명령.
        ```sh {: pre}
        ibmcloud is sg-rulec kube-CLUSTERID outbound tcp --port-min 20001 --port-max 20001 --remote 1.2.3.4
        ibmcloud is sg-rulec kube-CLUSTERID outbound tcp --port-min 20001 --port-max 20001 --remote 4.5.6.7
        ```
    
    

자세한 내용은 ‘동적 접속 제어’를 참조하십시오.

공공 서비스에 대한 아웃바운드 트래픽 허용

애플리케이션에서 호출하는 외부 서비스에서 해당 서비스를 호스팅하는 데 사용되는 IP/CIDR 집합이 작고 자주 변경되지 않는 경우 kube-clusterID 보안 그룹에서 해당 IP 또는 CIDR에 대한 아웃바운드 액세스를 선택적으로 허용할 수 있습니다.

다음 예제에서는 api.github.com 에서 github.com API를 사용합니다.

  1. curl 사용하여 프로그래밍 방식으로 IP를 찾습니다.

    curl -sS -H "Accept: application/vnd.github+json" https://api.github.com/meta | jq '.api'
    
  2. 이전 단계에서 찾은 각 CIDR을 kube-clusterID 보안 그룹의 아웃바운드 보안 그룹 규칙의 대상으로 추가합니다. 또는 클러스터를 생성할 때 클러스터 워커에 추가하는 사용자 지정 보안 그룹을 만들 수 있습니다.

    ibmcloud is sg-rulec kube-<clusterID> outbound icmp_tcp_udp --remote <IP-address-or-subnet>
    

자세한 내용은 GitHub's IP 주소에 대하여를 참조하세요.

아웃바운드 트래픽 보호 기능이 있는 허브 앤 스포크 VPC에 대한 고려 사항

허브 앤 스포크 모델에서는 허브 VPC 클러스터만 DNS 확인에 사용됩니다. 스포크 클러스터는 허브를 통해 DNS에 액세스합니다. 허브 앤 스포크 클러스터는 대개 서로 다른 VPC에 있으며 Transit Gateway 통해 연결됩니다.

버전 4.15 이상 클러스터에서는 허브 앤 스포크 모델은 각 보안 그룹을 조정하지 않고는 작동하지 않습니다. 이러한 조정을 통해 허브와 스포크 VPC 간의 트래픽이 허용됩니다.

  1. 각 스포크 클러스터의 kube-<clusterID> 보안 그룹에 규칙을 추가하여 스포크 VPC의 클러스터를 업데이트하여 허브 VPC에 액세스할 수 있도록 합니다. 허브 클러스터 워커가 배포된 VPC 서브넷 CIDR에 아웃바운드 규칙을 추가해야 합니다. 예를 들어, 스포크가 단일 허브에 연결되고 해당 허브에 3개 영역에 작업자가 있는 경우, 스포크의 kube-<clusterID> 보안 그룹에 각 서브넷에 대해 하나씩, 총 3개의 규칙을 추가해야 합니다.

    ibmcloud is sg-rulec kube-<spoke-clusterID> outbound icmp_tcp_udp --remote <hub-subnet-CIDR>
    
  2. 허브의 공유 VPE 게이트웨이 보안 그룹( kube-vpegw-vpcID )에 규칙을 추가하여 스포크에서 트래픽을 허용하도록 허브 클러스터를 업데이트합니다. 또는 공유 VPE 게이트웨이에 사용자 정의 보안 그룹을 사용하는 경우 대신 해당 사용자 정의 보안 그룹에 규칙을 추가합니다.

  3. 다음 명령을 실행하여 VPE 게이트웨이를 찾은 다음, 게이트웨이의 세부 정보를 확인하여 연결된 보안 그룹을 찾습니다. 다음 단계에서 규칙을 추가하려면 보안 그룹 ID를 기록해 두세요.

    ibmcloud is egs
    
  4. 스포크 워커가 배포된 VPC 서브넷에서 인바운드 규칙을 추가합니다. 예를 들어, 스포크가 세 개의 서로 다른 영역에 배포되었지만 각 영역에서 단일 서브넷에 배포된 경우 허브의 공유 VPE Gateway 보안 그룹에 세 개의 규칙이 추가됩니다.

    ibmcloud is sg-rulec kube-vpegw-<hub-vpcID> inbound icmp_tcp_udp --remote <spoke-subnet-CIDR>
    

공용 네트워크를 통해 클러스터 API 서버에 임시 트래픽 허용

VPC 클러스터 워커는 개인 네트워크를 사용하여 클러스터 마스터와 통신합니다. 이전에는 공용 서비스 엔드포인트가 활성화된 VPC 클러스터의 경우 개인 네트워크가 차단되거나 사용할 수 없는 경우 클러스터 워커는 공용 네트워크를 사용하여 클러스터 마스터와 통신할 수 있었습니다.

4.15 이상 클러스터에서는 클러스터 워커의 공개 아웃바운드 트래픽이 차단되므로 공개 네트워크로의 복귀는 옵션이 아닙니다. 공용 네트워크 백업 옵션을 허용하려면 아웃바운드 트래픽 보호를 비활성화해야 할 수도 있지만, 더 나은 대안이 있습니다. 대신, 개인 네트워크를 통한 작업자-마스터 연결에 일시적인 문제가 발생하는 경우 kube-clusterID 보안 그룹에 임시 보안 그룹 규칙을 추가하여 클러스터 마스터 apiserver 포트로의 아웃바운드 트래픽을 허용할 수 있습니다. 나중에 문제가 해결되면 임시 규칙을 제거할 수 있습니다.

다음 옵션 중 하나를 선택하여 비공개 네트워크가 다운된 경우 공용 네트워크를 통한 트래픽을 허용할 수 있습니다.

  • kube-clusterID 보안 그룹에 보안 그룹 규칙을 추가하여 API 서버로의 트래픽을 허용합니다.

    1. 클러스터 세부정보와 API 서버 포트를 확인하세요.
        ic ks cluster get --cluster <clusterID>
        ```
        API 서버 포트가 `30685` 인 경우의 출력 예입니다.
    
        ```sh {: screen}
        Name:                           prestg-sbd-vpc-4.15
        ID:                             coekl4a107ovqfndhh60
        ...
        Public Service Endpoint URL:    https://c100-e.containers.cloud.ibm.com:30685
        Private Service Endpoint URL:   https://c100.private.containers.cloud.ibm.com:30685
        ...
        ```
    1. 모든 공용 네트워크 액세스를 허용하려면 `kube-<clusterID>` 에서 `0.0.0.0/0` 로 아웃바운드 보안 그룹 규칙을 추가합니다.
    ```sh {: pre}
        ibmcloud is sg-rulec kube-<clusterID> outbound tcp --port-min <API port> --port-max <API port> --remote 0.0.0.0/0
        ```
        API 서버 포트가 `30685` 인 예제 명령입니다.
        ```sh {: pre}
        ibmcloud is sg-rulec kube-<clusterID> outbound tcp --port-min 30685 --port-max 30685 --remote 0.0.0.0/0
        ```
    
    
  • 아웃바운드 트래픽 보호를 비활성화합니다.

    ibmcloud oc vpc outbound-traffic-protection disable --cluster CLUSTER
    

프라이빗 전용 RHCOS 클러스터에서 Sysdig 통합 검증하기

sysdig-agent 파드가 RHCOS 워커를 사용하는 프라이빗 전용 클러스터의 CrashLoopBackOff 에 있는 경우, 아웃바운드 트래픽 보호를 사용하지 않도록 설정하거나 eBPF 드라이버를 사용하도록 Sysdig 에이전트를 업데이트할 수 있습니다. 자세한 내용은 sysdig-agent 파드가 비공개 전용 RHCOS 클러스터에 있는 이유(CrashLoopBackOff)를 참조하세요.