예제 컨텍스트 기반 제한사항 시나리오

컨텍스트 기반 제한을 사용하면 계정 소유자와 관리자는 액세스 요청의 컨텍스트에 따라 IBM Cloud® 리소스에 대한 액세스 제한을 정의하고 적용할 수 있습니다. IBM Cloud Kubernetes Service 리소스에 대한 액세스는 컨텍스트 기반 제한과 ID 및 액세스 관리 정책으로 제어할 수 있습니다. 자세한 내용은 컨텍스트 기반 제한으로 IBM Cloud Kubernetes Service 리소스 보호하기를 참조하세요.

IBM Cloud Kubernetes Service 클러스터에서 실행되는 애플리케이션(예: Kubernetes LoadBalancer, 에 의해 노출된 웹 서버)은 CBR 규칙의 제한을 받지 않습니다.

시나리오 이해

이 예제 시나리오에서는 모든 사설 트래픽을 계속 허용하면서 공용 네트워크를 통해 개별 IP 주소만 cluster API에 연결하도록 허용하여 클러스터에 대한 트래픽을 제한하기 위해 컨텍스트 기반 제한사항을 사용합니다.

다음 단계에서는 단일 IP 주소를 포함하는 네트워크 구역 또는 허용 목록을 작성하여 시작합니다. 그런 다음 모든 사설 네트워크 액세스를 허용하고 개별 IP 주소를 포함하는 네트워크 구역을 허용하는 클러스터에 대한 컨텍스트 기반 제한사항 규칙을 작성합니다. 규칙을 작성할 때 개별 IP 주소를 포함하는 네트워크 구역과 연관시킵니다.

전제조건

이 튜토리얼을 시작하기 전에 다음 리소스와 도구를 만들었거나 설치했는지 확인하세요.

네트워크 영역 작성

계정에 로그인하십시오. If applicable, target the appropriate resource group. 클러스터에 대한 컨텍스트를 설정하십시오.

  1. 다음 예제 명령을 실행하여 사용할 하나의 클라이언트 IP만 포함하는 네트워크를 작성하십시오.

    ibmcloud cbr zone-create --addresses 129.XX.XX.XX --description "Allow only client IP" --name allow-client-ip
    
  2. 네트워크 영역이 작성되었는지 확인하십시오.

    ibmcloud cbr zones
    

CBR 규칙 작성

  1. 네트워크 구역 (허용 목록) 을 작성한 후 CBR 규칙을 작성하고 이전 단계에서 작성한 네트워크 구역을 추가하십시오. 다음 예제는 cluster API 유형을 사용하는 규칙을 작성합니다. NETWORK-ZONE-ID 를 1단계에서작성한 allow-client-ip 네트워크 구역의 ID로 대체하십시오.

    ibmcloud cbr rule-create --api-types crn:v1:bluemix:public:containers-kubernetes::::api-type:cluster --description "privateAccess=allowAll, publicAccess=oneIP" --service-name containers-kubernetes --service-instance CLUSTER-ID --context-attributes endpointType=private --context-attributes endpointType=public,networkZoneId=NETWORK-ZONE-ID
    

    명령 옵션 이해.

    --api-types crn:v1:bluemix:public:containers-kubernetes::::api-type:cluster
    이전에 작성한 네트워크 구역의 리소스만 다양한 kubectl 명령에 대한 API를 포함하는 cluster API에 액세스할 수 있도록 crn:v1:bluemix:public:containers-kubernetes::::api-type:cluster API를 설정하십시오.
    --service-instance CLUSTER-ID
    이전에 작성한 네트워크 구역의 리소스만 CLUSTER-ID 에 액세스할 수 있도록 규칙의 범위를 단일 클러스터로 지정하십시오.
    --context-attributes endpointType=private
    네트워크 구역을 연관시키지 않고 컨텍스트 속성 endpointType=private 를 설정하면 클러스터에 대한 모든 개인용 트래픽을 허용합니다.
    --context-attributes endpointType=public,networkZoneId=all-client-ip
    allow-client-ip 구역의 리소스만 공용 네트워크를 통해 클러스터에 액세스할 수 있도록 컨텍스트 속성 endpointType=public 를 설정하고 이전에 작성한 networkZoneId=allow-client-ip 를 연관시키십시오.
  2. 규칙이 생성되었는지 확인합니다.

    ibmcloud cbr rules
    

컨텍스트 기반 제한사항 테스트

컨텍스트 기반 제한사항 설정을 테스트하기 위해 네트워크 구역에서 허용되는 개별 IP 주소가 아닌 IP 주소에서 공용 네트워크를 통해 클러스터에 대한 클러스터 API를 호출할 수 있습니다 (예: 팟 (Pod) 나열). 이 설정을 사용하면 모든 사설 연결이 허용되는 반면, 네트워크 구역의 개별 IP 주소만 공용 네트워크를 통해 클러스터 API에 연결할 수 있습니다.

추가 시나리오

이제 단순 CBR 네트워크 구역 및 규칙을 작성했으므로 다음과 같은 고급 예제를 검토하여 IBM Cloud Kubernetes Service 리소스에 대한 액세스를 추가로 제어하십시오.

다른 IP가 공용 및 사설 서비스 엔드포인트에 액세스할 수 있도록 허용

이 시나리오에서는 각 IP 주소에 대해 별도의 네트워크 구역을 작성하여 다른 IP 주소 또는 CIDR이 IBM Cloud Kubernetes Service 클러스터의 공용 및 사설 서비스 엔드포인트에 액세스할 수 있도록 허용합니다. 그런 다음 각 네트워크 구역이 공용 또는 사설 서비스 엔드포인트에 액세스할 수 있도록 허용하는 규칙을 작성합니다.

  1. 공용 IP 주소 또는 CIDR에 대한 네트워크 구역과 IBM Cloud Kubernetes Service 클러스터에 액세스하도록 허용할 사설 IP 주소 또는 CIDR에 대한 네트워크 구역을 작성하십시오.

    public-IP-zoneprivate-IP-zone 라는 별도의 네트워크 구역을 작성하는 예제 명령입니다. 이 예제에서 각 구역에는 클러스터에 액세스할 수 있도록 허용할 여러 IP 주소 또는 CIDR이 쉼표로 구분되어 포함되어 있습니다.

    ibmcloud cbr zone-create --addresses 1.2.3.4,12.12.12.0/24 --description "Allowed Public IP Addresses Zone" --name "public-ip-zone"
    
    ibmcloud cbr zone-create --addresses 10.20.20.20,10.10.10.0/24 --description "Allowed Private IP Addresses Zone" --name "private-ip-zone"
    
  2. 이전 단계에서 작성한 private-ip-zonepublic-ip-zone 구역의 ID를 가져오십시오.

    ibmcloud cbr zones
    
  3. private-ip-zone 가 클러스터의 개인 서비스 엔드포인트에 연결할 수 있도록 허용하고 public-ip-zone 가 클러스터의 공용 서비스 엔드포인트에만 연결할 수 있도록 허용하는 규칙을 작성하십시오. 이 규칙은 --service-instance 옵션으로 지정된 클러스터에 적용됩니다. 계정의 모든 클러스터에 규칙을 적용하려면 클러스터를 지정하지 마십시오.

    ibmcloud cbr rule-create --context-attributes "endpointType=public,networkZoneId=PUBLIC-IP-ZONE-ID" --context-attributes "endpointType=private,networkZoneId=PRIVATE-IP-ZONE-ID" --description "Separate private and public IPs for cluster and management rule" --service-name containers-kubernetes --service-instance CLUSTER-ID
    

다른 IP가 공용 및 사설 서비스 엔드포인트를 통해 다른 API 유형에 액세스할 수 있도록 허용

이전 시나리오와 마찬가지로 이 시나리오에서는 IBM Cloud Kubernetes Service 클러스터의 공용 또는 비공개 서비스 엔드포인트에 대해 서로 다른 IP 주소가 액세스할 수 있도록 허용합니다. 그러나 이 시나리오에서는 clustermanagement API에 대한 특정 API 유형에 의해 액세스가 추가로 제한됩니다. API 유형에 대한 자세한 정보는 특정 API 보호 를 참조하십시오.

  1. 공용 또는 사설 cluster API 또는 공용 또는 사설 management API에 액세스하도록 허용할 각 IP 주소에 대해 하나씩 네 개의 네트워크 구역을 작성하십시오. 클러스터에 액세스할 수 있도록 허용할 여러 IP 주소 또는 CIDR을 쉼표로 구분하여 포함할 수 있습니다.

    ibmcloud cbr zone-create --addresses 1.2.3.4,12.12.12.0/24 --description "Allowed Public IP Addresses for IKS and ROKS APIs" --name "public-mgmt-zone"
    
    ibmcloud cbr zone-create --addresses 10.20.20.20,10.10.10.0/24 --description "Allowed Private IP Addresses IKS and ROKS APIs" --name "private-mgmt-zone"
    
    ibmcloud cbr zone-create --addresses 11.11.11.0/24 --description "Allowed Public IP Addresses for cluster apiserver" --name "public-cluster-zone"
    
    ibmcloud cbr zone-create --addresses 10.30.30.30 --description "Allowed Private IP Addresses for cluster apiserver" --name "private-cluster-zone"
    
  2. 이전 단계에서 작성한 구역의 ID를 가져오십시오.

    ibmcloud cbr zones
    

    출력 예

    OK
    id                                 name                   address_count   
    c14c0839c13d8aa0afa8383e2be2e124   public-mgmt-zone       2   
    f9676ca6ef37685315fa254b89d73159   public-cluster-zone    1   
    c14c0839c13d8aa0afa8383e2be2e843   private-cluster-zone   1   
    b53353de929de39ac2381f9b4cde8507   private-mgmt-zone      2
    
  3. 이전에 작성한 구역을 사용하여 공용 및 사설 clustermanagement API에 대한 액세스를 보호하는 규칙을 작성하십시오.

    ibmcloud cbr rule-create --api-types crn:v1:bluemix:public:containers-kubernetes::::api-type:management --context-attributes "endpointType=public,networkZoneId=PUBLIC-MGMT-ZONE-ID" --context-attributes "endpointType=private,networkZoneId=PRIVATE-MGMT-ZONE-ID" --description "Separate private and public IPs for the management APIs" --service-name containers-kubernetes
    
    ibmcloud cbr rule-create --api-types crn:v1:bluemix:public:containers-kubernetes::::api-type:cluster --context-attributes "endpointType=public,networkZoneId=PUBLIC-CLUSTER-ZONE-ID" --context-attributes "endpointType=private,networkZoneId=PRIVATE-CLUSTER-ZONE-ID" --description "Separate private and public IPs for cluster APIs" --service-name containers-kubernetes