20.2. 보안 그룹 구성


AWS에 OpenShift Container Platform을 설치할 때 적절한 보안 그룹을 설정해야 합니다.

설치에 실패하지 않고 보안 그룹에 있어야 하는 일부 포트입니다. 설치하려는 클러스터 구성에 따라 더 많은 항목이 필요할 수 있습니다. 자세한 내용은 보안 그룹을 적절하게 조정하려면 Required Ports (필수 포트)를 참조하십시오.

모든 OpenShift Container Platform 호스트

  • 설치 프로그램/Ansible을 실행하는 호스트에서 TCP/22

etcd 보안 그룹

  • 마스터의 TCP/2379
  • etcd 호스트의 TCP/2380

마스터 보안 그룹

  • tcp/8443 from 0.0.0.0/0
  • 3.2 이전 또는 업그레이드된 환경의 모든 OpenShift Container Platform 호스트에서 TCP/53
  • 3.2 이전 또는 업그레이드된 환경의 모든 OpenShift Container Platform 호스트에서 UDP/53
  • 3.2로 설치된 새로운 환경의 모든 OpenShift Container Platform 호스트의 TCP/8053
  • 3.2로 설치된 새로운 환경의 모든 OpenShift Container Platform 호스트에서 UDP/8053

노드 보안 그룹

  • 마스터에서 TCP/10250
  • 노드에서 UDP/4789

인프라 노드(OpenShift Container Platform 라우터를 호스팅할 수 있는 노드)

  • tcp/443 from 0.0.0.0/0
  • TCP/80 from 0.0.0.0/0

CRI-O

CRIO를 사용하는 경우 oc exec 및 oc rsh 작업을 허용하려면 tcp/10010을 열어야 합니다.

마스터 및/또는 라우터의 부하 분산을 위해 외부 로드 밸런서(ELB)를 구성하는 경우 ELB에 대한 Ingress 및 Egress 보안 그룹도 적절하게 구성해야 합니다.

20.2.1. 감지된 IP 주소 및 호스트 이름 덮어쓰기

AWS에서 변수를 재정의해야 하는 상황은 다음과 같습니다.

Variable사용법

hostname

사용자는 DNS 호스트 이름과 DNS 확인에 대해 구성되지 않은 VPC에 설치됩니다.

ip

네트워크 인터페이스가 여러 개 구성되어 있으며 기본값이 아닌 다른 인터페이스 하나를 사용하려고 합니다.

public_hostname

  • VPC 서브넷이 자동 할당 공용 IP 에 대해 구성되지 않은 마스터 인스턴스입니다. 이 마스터에 대한 외부 액세스의 경우 필요한 외부 액세스를 제공하거나 VPN 연결을 통해 호스트의 내부 이름에 연결해야 하는 ELB 또는 기타 로드 밸런서 장치가 있어야 합니다.
  • 메타데이터가 비활성화된 마스터 인스턴스입니다.
  • 이 값은 실제로 노드에서 사용되지 않습니다.

public_ip

  • VPC 서브넷이 자동 할당 공용 IP 에 대해 구성되지 않은 마스터 인스턴스입니다.
  • 메타데이터가 비활성화된 마스터 인스턴스입니다.
  • 이 값은 실제로 노드에서 사용되지 않습니다.

특히 EC2 호스트의 경우 DNS 호스트 이름과 DNS 확인이 활성화된 VPC에 배포해야 합니다.

20.2.1.1. AWS(Amazon Web Services)용 OpenShift Container Platform 레지스트리 구성

AWS(Amazon Web Services)는 OpenShift Container Platform이 OpenShift Container Platform 컨테이너 레지스트리를 사용하여 컨테이너 이미지를 저장하는 데 사용할 수 있는 오브젝트 클라우드 스토리지를 제공합니다.

자세한 내용은 Amazon S3 을 참조하십시오.

사전 요구 사항

OpenShift Container Platform은 이미지 스토리지에 S3를 사용합니다. 설치 프로그램에서 레지스트리를 구성할 수 있도록 프로그램 액세스 권한이 있는 S3 버킷, IAM 정책 및 IAM 사용자를 생성해야 합니다.

아래 예제에서는 awscli를 사용하여 us-east-1 의 지역에서 openshift-registry-storage 라는 이름으로 버킷을 생성합니다.

# aws s3api create-bucket \
     --bucket openshift-registry-storage \
     --region us-east-1

기본 정책

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket",
        "s3:GetBucketLocation",
        "s3:ListBucketMultipartUploads"
      ],
      "Resource": "arn:aws:s3:::S3_BUCKET_NAME"
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:DeleteObject",
        "s3:ListMultipartUploadParts",
        "s3:AbortMultipartUpload"
      ],
      "Resource": "arn:aws:s3:::S3_BUCKET_NAME/*"
    }
  ]
}
20.2.1.1.1. S3을 사용하도록 OpenShift Container Platform 인벤토리 구성

절차

S3 버킷 및 IAM 사용자를 사용하도록 레지스트리에 대한 Ansible 인벤토리를 구성하려면 다음을 수행합니다.

[OSEv3:vars]
# AWS Registry Configuration
openshift_hosted_manage_registry=true
openshift_hosted_registry_storage_kind=object
openshift_hosted_registry_storage_provider=s3
openshift_hosted_registry_storage_s3_accesskey=AKIAJ6VLREDHATSPBUA 1
openshift_hosted_registry_storage_s3_secretkey=g/8PmTYDQVGssFWWFvfawHpDbZyGkjGNZhbWQpjH 2
openshift_hosted_registry_storage_s3_bucket=openshift-registry-storage 3
openshift_hosted_registry_storage_s3_region=us-east-1 4
openshift_hosted_registry_storage_s3_chunksize=26214400
openshift_hosted_registry_storage_s3_rootdirectory=/registry
openshift_hosted_registry_storage_s3_encrypt=false
openshift_hosted_registry_storage_s3_kmskeyid=aws_kms_key_id 5
openshift_hosted_registry_pullthrough=true
openshift_hosted_registry_acceptschema2=true
openshift_hosted_registry_enforcequota=true
openshift_hosted_registry_replicas=3
1 1
IAM 사용자의 액세스 키입니다. (해당되는 IAM 역할에는 필요하지 않음)
2
IAM 사용자의 비밀 키입니다. (해당되는 IAM 역할에는 필요하지 않음)
3
S3 스토리지 버킷 이름입니다.
4
버킷이 존재하는 영역입니다.
5
클러스터에서 데이터를 암호화하는 데 사용되는 암호화 키의 AWS KMS(AWS Key Management Service) 키 ID입니다.
20.2.1.1.2. S3를 사용하도록 OpenShift Container Platform 레지스트리 수동 구성

AWS(Amazon Web Services) S3 오브젝트 스토리지를 사용하려면 레지스트리의 구성 파일을 편집하고 레지스트리 Pod에 마운트합니다.

절차

  1. 현재 config.yml 을 내보냅니다 :

    $ oc get secret registry-config \
        -o jsonpath='{.data.config\.yml}' -n default | base64 -d \
      >> config.yml.old
  2. 이전 config.yml에서 새 구성 파일을 만듭니다.

    $ cp config.yml.old config.yml
  3. S3 매개 변수를 포함하도록 파일을 편집합니다. 레지스트리 구성 파일의 스토리지 섹션에서 accountname, accountkey, 컨테이너 및 영역을 지정합니다.

    storage:
      delete:
        enabled: true
      cache:
        blobdescriptor: inmemory
      s3:
        accesskey: AKIAJ6VLREDHATSPBUA 1
        secretkey: g/8PmTYDQVGssFWWFvfawHpDbZyGkjGNZhbWQpjH 2
        region: us-east-1 3
        bucket: openshift-registry-storage 4
        encrypt: False
        secure: true
        v4auth: true
        rootdirectory: /registry 5
        chunksize: "26214400"
    1
    S3 버킷에 액세스할 권한이 있는 AWS 액세스 키로 바꿉니다.
    2
    정의된 AWS 액세스 키에 해당하는 시크릿 키입니다.
    3
    레지스트리로 사용할 S3 버킷의 이름입니다.
    4
    레지스트리에서 이미지와 메타데이터를 저장할 위치입니다. (기본값은 /registry)
  4. registry-config 시크릿을 삭제합니다.

    $ oc delete secret registry-config -n default
  5. 업데이트된 구성 파일을 참조하도록 보안을 다시 생성합니다.

    $ oc create secret generic registry-config \
        --from-file=config.yml -n default
  6. 업데이트된 구성을 읽기 위해 레지스트리를 재배포합니다.

    $ oc rollout latest docker-registry -n default
20.2.1.1.3. 레지스트리에서 S3 스토리지를 사용하고 있는지 확인

레지스트리가 Amazon S3 스토리지를 사용하고 있는지 확인하려면 다음을 수행합니다.

절차

  1. 레지스트리 배포가 완료되면 레지스트리 deploymentconfig 는 registry-storage를 AWS S3 대신 emptydir 로 설명하지만 AWS S3 버킷의 구성은 보안 docker-config 에 상주합니다. docker-config 시크릿은 레지스트리 오브젝트 스토리지에 AWS S3을 사용할 때 모든 매개 변수를 제공하는 REGISTRY_CONFIGURATION_PATH 에 마운트합니다.

    $ oc describe dc docker-registry -n default
    ...
        Environment:
          REGISTRY_HTTP_ADDR:					:5000
          REGISTRY_HTTP_NET:					tcp
          REGISTRY_HTTP_SECRET:					SPLR83SDsPaGbGuwSMDfnDwrDRvGf6YXl4h9JQrToQU=
          REGISTRY_MIDDLEWARE_REPOSITORY_OPENSHIFT_ENFORCEQUOTA:	false
          REGISTRY_HTTP_TLS_KEY:					/etc/secrets/registry.key
          OPENSHIFT_DEFAULT_REGISTRY:				docker-registry.default.svc:5000
          REGISTRY_CONFIGURATION_PATH:				/etc/registry/config.yml
          REGISTRY_OPENSHIFT_SERVER_ADDR:				docker-registry.default.svc:5000
          REGISTRY_HTTP_TLS_CERTIFICATE:				/etc/secrets/registry.crt
        Mounts:
          /etc/registry from docker-config (rw)
          /etc/secrets from registry-certificates (rw)
          /registry from registry-storage (rw)
      Volumes:
       registry-storage:
        Type:	EmptyDir (a temporary directory that shares a pod's lifetime) 1
        Medium:
       registry-certificates:
        Type:	Secret (a volume populated by a Secret)
        SecretName:	registry-certificates
        Optional:	false
       docker-config:
        Type:	Secret (a volume populated by a Secret)
        SecretName:	registry-config
        Optional:	false
    ....
    1
    Pod의 수명을 공유하는 임시 디렉터리입니다.
  2. /registry 마운트 지점이 비어 있는지 확인합니다.

    $ oc exec \
        $(oc get pod -l deploymentconfig=docker-registry \
        -o=jsonpath='{.items[0].metadata.name}')  -i -t -- ls -l /registry
    total 0

    비어 있는 경우 S3 구성이 registry-config 보안에 정의되어 있기 때문입니다.

    $ oc describe secret registry-config
    Name:         registry-config
    Namespace:    default
    Labels:       <none>
    Annotations:  <none>
    
    Type:  Opaque
    
    Data
    ====
    config.yml:  398 bytes
  3. 설치 프로그램에서 설치 설명서의 Storage 에 표시된 대로 확장 레지스트리 기능을 사용하여 원하는 구성으로 config.yml 파일을 생성합니다. 스토리지 버킷 구성이 저장된 storage 섹션을 포함하여 구성 파일을 보려면 다음을 수행합니다.

    $ oc exec \
        $(oc get pod -l deploymentconfig=docker-registry \
          -o=jsonpath='{.items[0].metadata.name}') \
      cat /etc/registry/config.yml
    
      version: 0.1
      log:
        level: debug
      http:
        addr: :5000
      storage:
        delete:
          enabled: true
        cache:
          blobdescriptor: inmemory
        s3:
          accesskey: AKIAJ6VLREDHATSPBUA
          secretkey: g/8PmTYDQVGssFWWFvfawHpDbZyGkjGNZhbWQpjH
          region: us-east-1
          bucket: openshift-registry-storage
          encrypt: False
          secure: true
          v4auth: true
          rootdirectory: /registry
          chunksize: "26214400"
      auth:
        openshift:
          realm: openshift
      middleware:
        registry:
        - name: openshift
        repository:
        - name: openshift
          options:
            pullthrough: true
            acceptschema2: true
            enforcequota: true
        storage:
        - name: openshift

    또는 시크릿을 볼 수 있습니다.

    $ oc get secret registry-config -o jsonpath='{.data.config\.yml}' | base64 -d
    version: 0.1
    log:
      level: debug
    http:
      addr: :5000
      storage:
        delete:
          enabled: true
        cache:
          blobdescriptor: inmemory
        s3:
          accesskey: AKIAJ6VLREDHATSPBUA
          secretkey: g/8PmTYDQVGssFWWFvfawHpDbZyGkjGNZhbWQpjH
          region: us-east-1
          bucket: openshift-registry-storage
          encrypt: False
          secure: true
          v4auth: true
          rootdirectory: /registry
          chunksize: "26214400"
    auth:
      openshift:
        realm: openshift
    middleware:
      registry:
      - name: openshift
      repository:
      - name: openshift
      options:
        pullthrough: true
        acceptschema2: true
        enforcequota: true
      storage:
      - name: openshift

emptyDir 볼륨을 사용하는 경우 /registry 마운트 지점은 다음과 같이 표시됩니다.

$ oc exec \
    $(oc get pod -l deploymentconfig=docker-registry \
    -o=jsonpath='{.items[0].metadata.name}')  -i -t -- df -h /registry
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdc         100G  226M   30G   1% /registry


$ oc exec \
    $(oc get pod -l deploymentconfig=docker-registry \
    -o=jsonpath='{.items[0].metadata.name}')  -i -t -- ls -l /registry
total 0
drwxr-sr-x. 3 1000000000 1000000000 22 Jun 19 12:24 docker
Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.