14.2. ホステッドクラスター向けに内部 OVN IPv4 サブネットを設定する
ホステッドクラスターでは、ルーティングの競合を回避したり、ネットワークアーキテクチャーをカスタマイズしたり、仮想プライベートクラウド (VPC) ピアリングを有効にしたりするために、内部 OVN サブネットを設定できます。
- CIDR の競合を避ける
- Red Hat OpenShift Service on AWS クラスターをホストする VPC を、デフォルトの OVN 内部サブネットである 100.88.0.0/16 および 100.64.0.0/16 を使用する他の VPC に接続します。
- ネットワークアーキテクチャーをカスタマイズする
- 社内ネットワークポリシーに合わせて、内部 OVN サブネットを設定してください。
- VPC ピアリングを有効にする
- デフォルトのサブネットがピアリングされたネットワークと競合する環境に、ホステッドクラスターをデプロイします。
OVN 内部サブネットを設定するには、OVN-Kubernetes 内部サブネット設定オプションを 2 つ公開します。
internalJoinSubnet-
OVN-Kubernetes がネットワーク参加に使用する内部サブネット (デフォルト:
100.64.0.0/16) internalTransitSwitchSubnet-
OVN インターコネクトアーキテクチャーにおける分散トランジットスイッチに使用される内部サブネット (デフォルト:
100.88.0.0/16)
既存のホステッドクラスター内で内部 OVN サブネットを設定することも、ホステッドクラスターを作成する際にサブネットを設定することもできます。
前提条件
- ホステッドクラスターのバージョンは、OpenShift Container Platform 4.20 以降である必要があります。
-
ネットワークタイプについては、ホステッドクラスターは
networkType: OVNKubernetesを使用する必要があります。 カスタムサブネットは、以下のサブネットと重複してはなりません。
- 機械 CIDR
- サービス CIDR
- クラスターネットワーク CIDR
- インフラストラクチャー内のその他のネットワーク
手順
ホステッドクラスターを作成する際に内部 OVN サブネットを設定するには、ホステッドクラスターの設定ファイルに次のセクションを含めます。
apiVersion: hypershift.openshift.io/v1beta1 kind: HostedCluster metadata: name: <hosted_cluster_name> namespace: <hosted_control_plane_namespace> spec: networking: networkType: OVNKubernetes machineCIDR: 10.0.0.0/16 serviceCIDR: 172.30.0.0/16 clusterNetwork: - cidr: 10.128.0.0/14 operatorConfiguration: clusterNetworkOperator: ovnKubernetesConfig: ipv4: internalJoinSubnet: "100.99.0.0/16" internalTransitSwitchSubnet: "100.69.0.0/16"ここでは、以下のようになります。
metadata- ホステッドクラスター名前空間と Hosted Control Plane 名前空間の名前を指定します。
spec.operatorConfiguration.clusterNetworkOperator.ovnKubernetesConfig.ipv4-
使用するサブネットを指定します。このセクションのサブネットフィールドは両方とも、
192.168.1.0/24のような有効な IPv4 CIDR 表記でなければなりません。接頭辞の範囲は/0から/30までです (両端を含む)。最初のオクテットは 0 であってはならず、文字列の長さは 9-18 文字でなければなりません。サブネットフィールドには同じ値を使用できません。サブネットは、クラスター内のノードごとに 1 つの IP アドレスを格納できる十分な大きさでなければなりません。サブネットのサイズを計画する際は、将来のクラスターの拡張性を考慮してください。これらのフィールドを省略した場合、internalJoinSubnetフィールドのデフォルト値は100.64.0.0/16となり、internalTransitSwitchSubnetフィールドのデフォルト値は100.88.0.0/16となります。
ホステッドクラスターの作成に関する詳細は、CLI を使用したホステッドクラスターの作成を参照してください。
既存のホステッドクラスターで内部 OVN サブネットを設定するには、次のコマンドを入力します。
重要既存のホステッドクラスターにこの変更を加えると、
ovnkube-nodeDaemonSet が展開され、コンピュートノード上の OVN コンポーネントが再起動されます。この処理中、一時的にネットワーク接続が途切れる場合があります。$ oc patch hostedcluster <hosted_cluster_name> \ -n <hosted_control_plane_namespace> \ --type=merge \ -p '{ "spec": { "operatorConfiguration": { "clusterNetworkOperator": { "ovnKubernetesConfig": { "ipv4": { "internalJoinSubnet": "100.99.0.0/16", "internalTransitSwitchSubnet": "100.69.0.0/16" } } } } } }'ここでは、以下のようになります。
metadata- ホステッドクラスター名前空間と Hosted Control Plane 名前空間の名前を指定します。
spec.operatorConfiguration.clusterNetworkOperator.ovnKubernetesConfig.ipv4-
使用するサブネットを指定します。このセクションのサブネットフィールドは両方とも、
192.168.1.0/24のような有効な IPv4 CIDR 表記でなければなりません。接頭辞の範囲は/0から/30までです (両端を含む)。最初のオクテットは 0 であってはならず、文字列の長さは 9-18 文字でなければなりません。サブネットフィールドには同じ値を使用できません。サブネットは、クラスター内のノードごとに 1 つの IP アドレスを格納できる十分な大きさでなければなりません。サブネットのサイズを計画する際は、将来のクラスターの拡張性を考慮してください。これらのフィールドを省略した場合、internalJoinSubnetフィールドのデフォルト値は100.64.0.0/16となり、internalTransitSwitchSubnetフィールドのデフォルト値は100.88.0.0/16となります。
検証
ホストされている設定が正しいことを確認するには、次のコマンドを入力してください。
$ oc get hostedcluster <hosted_cluster_name> -n <hosted_control_plane_namespace> \ -o jsonpath='{.spec.operatorConfiguration.clusterNetworkOperator.ovnKubernetesConfig}' | jq .出力例
{ "ipv4": { "internalJoinSubnet": "100.99.0.0/16", "internalTransitSwitchSubnet": "100.69.0.0/16" } }ホステッドクラスターでネットワーク Operator の設定を確認してください。
以下のコマンドを入力して、ホステッドクラスター kubeconfig ファイルを抽出します。
$ oc extract secret/<hosted_cluster_name>-admin-kubeconfig \ -n <hosted_control_plane_namespace> --to=- > <hosted_cluster_kubeconfig_file>以下のコマンドを入力して、ネットワーク Operator の設定を確認してください。
$ oc get network.operator.openshift.io cluster \ --kubeconfig=<hosted_cluster_kubeconfig_file> \ -o jsonpath='{.spec.defaultNetwork.ovnKubernetesConfig.ipv4}' | jq .出力例
{ "internalJoinSubnet": "100.99.0.0/16", "internalTransitSwitchSubnet": "100.69.0.0/16" }
以下の手順を実行して、2 つのテスト Pod を作成します。
ノード 1 で、次の例に示すように Pod1 を作成します。
kind: Pod apiVersion: v1 metadata: name: "<pod_1>" namespace: "<hosted_control_plane_namespace>" labels: name: <pod_name> spec: securityContext: runAsNonRoot: true seccompProfile: type: RuntimeDefault containers: - image: "<image_url>" name: <pod_name> securityContext: allowPrivilegeEscalation: false capabilities: drop: ["ALL"] nodeName: "${NODE1}"ノード 2 で、次の例に示すように Pod2 を作成します。
kind: Pod apiVersion: v1 metadata: name: "<pod_2>" namespace: "<hosted_control_plane_namespace>" labels: name: <pod_name> spec: securityContext: runAsNonRoot: true seccompProfile: type: RuntimeDefault containers: - image: "<image_url>" name: <pod_name> securityContext: allowPrivilegeEscalation: false capabilities: drop: ["ALL"] nodeName: "${NODE2}"
次の例に示すように、両方の Pod をバックアップするテストサービスを作成します。
kind: Service apiVersion: v1 metadata: name: "<test_service_name" namespace: "<hosted_control_plane_namespace>" labels: name: test-service spec: internalTrafficPolicy: "Cluster" externalTrafficPolicy: "" ipFamilyPolicy: "SingleStack" ports: - name: http port: <service_test_port_number> protocol: "TCP" targetPort: 8080 selector: name: "<pod_name>" type: "ClusterIP"OVNPod が実行されていることを確認してください。
以下のコマンドを入力します。
$ oc rollout status daemonset/ovnkube-node \ -n openshift-ovn-kubernetes \ --kubeconfig=<hosted_cluster_kubeconfig_file> \ --timeout=5m以下のコマンドを入力します。
$ oc get pods -n openshift-ovn-kubernetes --kubeconfig=<hosted_cluster_kubeconfig_file>すべての
ovnkube-nodePod は実行状態であり、すべてのコンテナーが準備完了状態である必要があります。
以下のコマンドを入力して、変更内容がネットワーク Operator に同期されていることを確認してください。
$ oc get network.operator.openshift.io/cluster \ -ojsonpath='{.spec.defaultNetwork.ovnKubernetesConfig.ipv4}' \ --kubeconfig=<clusters-hostedclustername> | jq .Pod2 の IP アドレスを取得し、Pod1 から転送します。
以下のコマンドを入力します。
$ pod2_ip=oc get pod -n e2e-test-networking-ovnkubernetes-xxt8s <pod_2> -o=jsonpath={.status.podIPs[0].ip}以下のコマンドを入力します。
$ oc exec <pod_1> -- /bin/sh -x -c curl --connect-timeout 5 -s <pod2_ip>:8080
サービスの IP アドレスを取得し、サービスから外部経由で Pod にアクセスできることを確認します。
以下のコマンドを入力します。
$ SERVICE_IP=oc get service test-service-o=jsonpath={.spec.clusterIPs[0]}以下のコマンドを入力します。
$ oc exec <pod_1> -- /bin/sh -x -c curl --connect-timeout 5 -s $SERVICE_IP:<service_test_port_number>