Red Hat Training

A Red Hat training course is available for OpenShift Container Platform

20.2. セキュリティーグループの設定

AWS に OpenShift Container Platform をインストールする際は、適切なセキュリティーグループがセットアップされていることを確認してください。

セキュリティーグループにはいくつかのポートを設定しておく必要があり、それらがないとインストールは失敗します。また、インストールしようとしているクラスターの設定によっては、追加のポートが必要になる場合があります。セキュリティーグループの詳細、およびその適切な調整方法については、必要なポート を参照してください。

すべての OpenShift Container Platform ホスト

  • インストーラー/Ansible を実行しているホストの tcp/22

etcd セキュリティーグループ

  • マスターの tcp/2379
  • etcd ホストの tcp/2380

マスターのセキュリティーグループ

  • tcp/8443 (0.0.0.0/0)
  • 3.2 よりも前にインストールされた環境、または 3.2 にアップグレードされた環境向けのすべての OpenShift Container Platform ホストの tcp/53
  • 3.2 よりも前にインストールされた環境、または 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 (0.0.0.0/0)
  • tcp/80 (0.0.0.0/0)

CRI-O

CRI-O を使用している場合は、tcp/10010 を開き、oc exec および oc rsh 操作を実行できるようにします。

マスターまたはルートの負荷分散のために外部のロードバランサー (ELB) を設定する場合は、ELB の Ingress および Egress のセキュリティーグループを設定することも必要になります。

20.2.1. 検出された IP アドレスとホスト名の上書き

AWS では、以下のような場合に変数の上書きが必要になります。

変数使用法

hostname

ユーザーが DNS hostnamesDNS resolution の両方に対して設定されていない VPC にインストールしている。

ip

複数のネットワークインターフェイスを設定しており、デフォルト以外のインターフェイスを使用することを検討している。

public_hostname

  • VPC サブネットが Auto-assign Public IP について設定されていないマスターインスタンス。このマスターへの外部アクセスについては、ユーザーは ELB か、または必要な外部アクセスを提供する他のロードバランサーを使用する必要があります。 または、VPN 接続を介してホストの内部名に接続する必要があります。
  • メタデータが無効にされているマスターインスタンス。
  • この値は、実際にはノードによって使用されません。

public_ip

  • VPC サブネットが Auto-assign Public IP について設定されていないマスターインスタンス。
  • メタデータが無効にされているマスターインスタンス。
  • この値は、実際にはノードによって使用されません。

EC2 ホストの場合はとくに、DNS ホスト名DNS 解決 の両方が有効にされている VPC にデプロイされる必要があります。

20.2.1.1. Amazon Web Services (AWS) の OpenShift Container Platform レジストリーの設定

Amazon Web Services (AWS) は、OpenShift Container Platform が OpenShift Container Platform コンテナーイメージレジストリーを使用してコンテナーイメージを保存するために使用可能なオブジェクトクラウドストレージを提供します。

詳細は、Amazon S3 を参照してください。

前提条件

OpenShift Container Platform はイメージストレージに S3 を使用します。S3 バケット、IAM ポリシー、および Programmatic Access を持つ 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. OpenShift Container Platform インベントリーを S3 を使用するように設定する

手順

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 Key Management Service (AWS KMS) キー ID。
20.2.1.1.2. S3 を使用するための OpenShift Container Platform レジストリーの手動設定

Amazon Web Services (AWS) 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 パラメーターを追加します。レジストリーの設定ファイルの storage セクションにアカウント名、アカウントキー、コンテナー、およびレルムを指定します。

    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 シークレットは REGISTRY_CONFIGURATION_PATH にマウントされ、これにより、レジストリーオブジェクトストレージに AWS S3 を使用する場合にすべてのパラメーターが指定されます。

    $ 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. インストーラーは、インストールドキュメントのストレージセクション で記載されているように、拡張されたレジストリー機能を使用して、希望の設定で 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