This documentation is for a release that is no longer maintained
See documentation for the latest supported version 3 or the latest supported version 4.ネットワーク
クラスターネットワークの設定および管理
概要
第1章 ネットワークについて リンクのコピーリンクがクリップボードにコピーされました!
Kubernetes は、確実に Pod 間がネットワークで接続されるようにし、内部ネットワークから IP アドレスを各 Pod に割り当てます。これにより、Pod 内のすべてのコンテナーが同じホスト上に置かれているかのように動作します。各 Pod に IP アドレスを割り当てると、ポートの割り当て、ネットワーク、名前の指定、サービス検出、負荷分散、アプリケーション設定、移行などの点で、Pod を物理ホストや仮想マシンのように扱うことができます。
一部のクラウドプラットフォームでは、169.254.169.254 IP アドレスでリッスンするメタデータ API があります。これは、IPv4 169.254.0.0/16 CIDR ブロックのリンクローカル IP アドレスです。
この CIDR ブロックは Pod ネットワークから到達できません。これらの IP アドレスへのアクセスを必要とする Pod には、Pod 仕様の spec.hostNetwork フィールドを true に設定して、ホストのネットワークアクセスが付与される必要があります。
Pod ホストのネットワークアクセスを許可する場合、Pod に基礎となるネットワークインフラストラクチャーへの特権アクセスを付与します。
1.1. OpenShift Container Platform DNS リンクのコピーリンクがクリップボードにコピーされました!
フロントエンドサービスやバックエンドサービスなど、複数のサービスを実行して複数の Pod で使用している場合、フロントエンド Pod がバックエンドサービスと通信できるように、ユーザー名、サービス IP などの環境変数を作成します。サービスが削除され、再作成される場合には、新規の IP アドレスがそのサービスに割り当てられるので、フロントエンド Pod がサービス IP の環境変数の更新された値を取得するには、これを再作成する必要があります。さらに、バックエンドサービスは、フロントエンド Pod を作成する前に作成し、サービス IP が正しく生成され、フロントエンド Pod に環境変数として提供できるようにする必要があります。
そのため、OpenShift Container Platform には DNS が組み込まれており、これにより、サービスは、サービス IP/ポートと共にサービス DNS によって到達可能になります。
第2章 ホストへのアクセス リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform インスタンスにアクセスして、セキュアなシェル (SSH) アクセスでマスターノードにアクセスするために bastion ホストを作成する方法を学びます。
2.1. インストーラーでプロビジョニングされるインフラストラクチャークラスターでの Amazon Web Services のホストへのアクセス リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform インストーラーは、OpenShift Container Platform クラスターにプロビジョニングされる Amazon Elastic Compute Cloud (Amazon EC2) インスタンスのパブリック IP アドレスを作成しません。OpenShift Container Platform ホストに対して SSH を実行できるようにするには、以下の手順を実行する必要があります。
手順
-
openshift-installコマンドで作成される仮想プライベートクラウド (VPC) に対する SSH アクセスを可能にするセキュリティーグループを作成します。 - インストーラーが作成したパブリックサブネットのいずれかに Amazon EC2 インスタンスを作成します。
パブリック IP アドレスを、作成した Amazon EC2 インスタンスに関連付けます。
OpenShift Container Platform のインストールとは異なり、作成した Amazon EC2 インスタンスを SSH キーペアに関連付ける必要があります。これにはインターネットを OpenShift Container Platform クラスターの VPC にブリッジ接続するための SSH bastion としてのみの単純な機能しかないため、このインスタンスにどのオペレーティングシステムを選択しても問題ありません。どの Amazon Machine Image (AMI) を使用するかについては、注意が必要です。たとえば、Red Hat Enterprise Linux CoreOS では、インストーラーと同様に、Ignition でキーを指定することができます。
Amazon EC2 インスタンスをプロビジョニングし、これに対して SSH を実行した後に、OpenShift Container Platform インストールに関連付けた SSH キーを追加する必要があります。このキーは bastion インスタンスのキーとは異なる場合がありますが、異なるキーにしなければならない訳ではありません。
注記直接の SSH アクセスは、障害復旧を目的とする場合にのみ推奨されます。Kubernetes API が応答する場合、特権付き Pod を代わりに実行します。
-
oc get nodesを実行し、出力を検査し、マスターであるノードのいずれかを選択します。ホスト名はip-10-0-1-163.ec2.internalに類似したものになります。 Amazon EC2 に手動でデプロイした bastion SSH ホストから、そのマスターホストに対して SSH を実行します。インストール時に指定したものと同じ SSH キーを使用するようにします。
ssh -i <ssh-key-path> core@<master-hostname>
$ ssh -i <ssh-key-path> core@<master-hostname>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第3章 OpenShift Container Platform における Cluster Network Operator リンクのコピーリンクがクリップボードにコピーされました!
Cluster Network Operator (CNO) は、インストール時にクラスター用に選択される Container Network Interface (CNI) Software Defined Networking (SDN) プラグインを含む、OpenShift Container Platform クラスターの各種のクラスターネットワークコンポーネントをデプロイし、これらを管理します。
3.1. Cluster Network Operator リンクのコピーリンクがクリップボードにコピーされました!
Cluster Network Operator は、operator.openshift.io API グループから network API を実装します。Operator は、DaemonSet を使って OpenShift SDN プラグイン、またはクラスターインストール時に選択されている場合には別の SDN プラグインをデプロイします。
手順
Cluster Network Operator は、インストール時に Kubernetes Deployment としてデプロイされます。
以下のコマンドを実行して Deployment のステータスを表示します。
oc get -n openshift-network-operator deployment/network-operator
$ oc get -n openshift-network-operator deployment/network-operator NAME READY UP-TO-DATE AVAILABLE AGE network-operator 1/1 1 1 56mCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを実行して、Cluster Network Operator の状態を表示します。
oc get clusteroperator/network
$ oc get clusteroperator/network NAME VERSION AVAILABLE PROGRESSING DEGRADED SINCE network 4.2.0 True False False 50mCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のフィールドは、Operator のステータス (
AVAILABLE、PROGRESSING、およびDEGRADED) についての情報を提供します。AVAILABLEフィールドは、Cluster Network Operator が Available ステータス条件を報告する場合にTrueになります。
3.2. クラスターネットワーク設定の表示 リンクのコピーリンクがクリップボードにコピーされました!
すべての新規 OpenShift Container Platform インストールには、cluster という名前の network.config オブジェクトがあります。
3.3. Cluster Network Operator のステータス表示 リンクのコピーリンクがクリップボードにコピーされました!
oc describe コマンドを使用して、Cluster Network Operator のステータスを検査し、その詳細を表示することができます。
手順
以下のコマンドを実行して、Cluster Network Operator のステータスを表示します。
oc describe clusteroperators/network
$ oc describe clusteroperators/networkCopy to Clipboard Copied! Toggle word wrap Toggle overflow
3.4. Cluster Network Operator ログの表示 リンクのコピーリンクがクリップボードにコピーされました!
oc logs コマンドを使用して、Cluster Network Operator ログを表示できます。
手順
以下のコマンドを実行して、Cluster Network Operator のログを表示します。
oc logs --namespace=openshift-network-operator deployment/network-operator
$ oc logs --namespace=openshift-network-operator deployment/network-operatorCopy to Clipboard Copied! Toggle word wrap Toggle overflow
3.5. Cluster Network Operator のカスタムリソース (CR、Custom Resource) リンクのコピーリンクがクリップボードにコピーされました!
Network.operator.openshift.io カスタムリソース (CR) のクラスターネットワーク設定は、Cluster Network Operator (CNO) の設定内容を保存します。Operator はクラスターネットワークを管理します。
defaultNetwork パラメーターのパラメーターを CNO CR に設定することにより、OpenShift Container Platform クラスターのクラスターネットワーク設定を指定できます。以下の CR は、CNO のデフォルト設定を表示し、設定可能なパラメーターと有効なパラメーターの値の両方について説明しています。
Cluster Network Operator CR
- 1
- Pod ID の割り当て、サブネットプレフィックスの長さの個別ノードへの割り当てに使用される IP アドレスのブロックを指定する一覧です。
- 2
- サービスの IP アドレスのブロック。OpenShift SDN Container Network Interface (CNI) プラグインは、サービスネットワークの単一 IP アドレスブロックのみをサポートします。
- 3
- クラスターネットワークの SDN (software-defined networking) を設定します。
- 4
- このオブジェクトのパラメーターは、Kubernetes ネットワークプロキシー (kube-proxy) 設定を指定します。
- 5
iptablesルールの更新期間。デフォルト値は30sです。有効なサフィックスには、s、m、およびhなどが含まれ、これらについては、Go time package ドキュメントで説明されています。- 6
iptablesルールを更新する前の最小期間。このパラメーターにより、更新の頻度が高くなり過ぎないようにできます。有効なサフィックスには、s、m、およびhが含まれ、これらについては、Go time package で説明されています。
3.5.1. OpenShift SDN の設定パラメーター リンクのコピーリンクがクリップボードにコピーされました!
以下の YAML オブジェクトは OpenShift SDN の設定パラメーターについて説明しています。
3.5.2. Cluster Network Operator のサンプル CR リンクのコピーリンクがクリップボードにコピーされました!
以下の例のように、CNO の完全な CR が表示されます。
Cluster Network Operator のサンプル CR
第4章 OpenShift Container Platform の DNS Operator リンクのコピーリンクがクリップボードにコピーされました!
DNS Operator は、Pod に対して名前解決サービスを提供するために CoreDNS をデプロイし、これを管理し、OpenShift 内での DNS ベースの Kubernetes サービス検出を可能にします。
4.1. DNS Operator リンクのコピーリンクがクリップボードにコピーされました!
DNS Operator は、operator.openshift.io API グループから dns API を実装します。この Operator は、DaemonSet を使用して CoreDNS をデプロイし、DaemonSet の Service を作成し、 kubelet を Pod に対して名前解決に CoreDNS Service IP を使用するように指示するように設定します。
手順
DNS Operator は、インストール時に Kubernetes Deployment としてデプロイされます。
oc getコマンドを使用して Deployment ステータスを表示します。oc get -n openshift-dns-operator deployment/dns-operator
$ oc get -n openshift-dns-operator deployment/dns-operator NAME READY UP-TO-DATE AVAILABLE AGE dns-operator 1/1 1 1 23hCopy to Clipboard Copied! Toggle word wrap Toggle overflow ClusterOperator は、Operator の現在の状態を保持するカスタムリソースオブジェクトです。このオブジェクトは、Operator によってそれらの状態をクラスターの残りの部分に送るために使用されます。
oc getコマンドを使用して DNS Operator の状態を表示します。oc get clusteroperator/dns
$ oc get clusteroperator/dns NAME VERSION AVAILABLE PROGRESSING DEGRADED SINCE dns 4.1.0-0.11 True False False 92mCopy to Clipboard Copied! Toggle word wrap Toggle overflow AVAILABLE、PROGRESSINGおよびDEGRADEDは、Operator のステータスについての情報を提供します。AVAILABLEは、CoreDNS DaemonSet からの 1 つ以上の Pod がAvailableステータス条件を報告する場合はTrueになります。
4.2. デフォルト DNS の表示 リンクのコピーリンクがクリップボードにコピーされました!
すべての新規 OpenShift Container Platform インストールには、default という名前の dns.operator があります。これは、カスタマイズしたり、置き換えたり、または追加の dnses で補足したりすることができません。
手順
oc describeコマンドを使用してデフォルトのdnsを表示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow クラスターのサービス CIDR を見つけるには、
oc getコマンドを使用します。oc get networks.config/cluster -o jsonpath='{$.status.serviceNetwork}'$ oc get networks.config/cluster -o jsonpath='{$.status.serviceNetwork}' [172.30.0.0/16]Copy to Clipboard Copied! Toggle word wrap Toggle overflow
CoreDNS Corefile または Kubernetes プラグインの設定はサポートされていません。
4.3. DNS Operator のステータス リンクのコピーリンクがクリップボードにコピーされました!
oc describe コマンドを使用して、DNS Operator のステータスを検査し、その詳細を表示することができます。
手順
DNS Operator のステータスを表示します。
oc describe clusteroperators/dns
$ oc describe clusteroperators/dns
4.4. DNS Operator ログ リンクのコピーリンクがクリップボードにコピーされました!
oc logs コマンドを使用して、DNS Operator ログを表示できます。
手順
DNS Operator のログを表示します。
oc logs --namespace=openshift-dns-operator deployment/dns-operator
$ oc logs --namespace=openshift-dns-operator deployment/dns-operator
第5章 OpenShift Container Platform の Ingress Operator リンクのコピーリンクがクリップボードにコピーされました!
Ingress Operator は ingresscontroller API を実装し、OpenShift Container Platform クラスターサービスへの外部アクセスを可能にするコンポーネントです。Operator は、1 つ以上の HAProxy ベースの ingress コントローラー をデプロイし、管理してこれを可能にします。OpenShift Container Platform Route および Kubernetes Ingress リソースを指定して、トラフィックをルーティングするために Ingress Operator を使用します。
5.1. Ingress 設定アセット リンクのコピーリンクがクリップボードにコピーされました!
インストールプログラムでは、config.openshift.io API グループの Ingress リソースでアセットを生成します (cluster-ingress-02-config.yml)。
Ingress リソースの YAML 定義
インストールプログラムは、このアセットを manifests/ ディレクトリーの cluster-ingress-02-config.yml ファイルに保存します。この Ingress リソースは、Ingress のクラスター全体の設定を定義します。この Ingress 設定は、以下のように使用されます。
- Ingress Operator は、クラスター Ingress 設定のドメインを、デフォルト Ingress コントローラーのドメインとして使用します。
-
OpenShift API サーバー Operator は、クラスター Ingress 設定のドメインを、明示的なホストを指定しない
Routeリソースのデフォルトホストを生成する際に使用されるドメインとして使用します。
5.2. イメージコントローラー設定パラメーター リンクのコピーリンクがクリップボードにコピーされました!
ingresscontrollers.operator.openshift.io リソースは以下の設定パラメーターを提供します。
| パラメーター | 説明 |
|---|---|
|
|
空の場合、デフォルト値は |
|
|
|
|
|
設定されていない場合、デフォルト値は
|
|
|
シークレットには以下のキーおよびデータが含まれる必要があります: *
設定されていない場合、ワイルドカード証明書は自動的に生成され、使用されます。証明書は Ingress コントーラーの 使用中の証明書 (生成されるか、ユーザー指定の場合かを問わない) は OpenShift Container Platform のビルトイン OAuth サーバーに自動的に統合されます。 |
|
|
|
|
|
|
|
|
設定されていない場合は、デフォルト値が使用されます。 注記
|
すべてのパラメーターはオプションです。
5.2.1. Ingress コントローラーエンドポイントの公開ストラテジー リンクのコピーリンクがクリップボードにコピーされました!
HostNetwork エンドポイント公開ストラテジーを持つ Ingress コントローラーには、ノードごとに単一の Pod レプリカのみを設定できます。n のレプリカを使用する場合、それらのレプリカをスケジュールできる n 以上のノードを使用する必要があります。各 Pod はスケジュールされるノードホストでポート 80 および 443 を要求するので、同じノードで別の Pod がそれらのポートを使用している場合、レプリカをノードにスケジュールすることはできません。
5.3. デフォルト Ingress コントローラーの表示 リンクのコピーリンクがクリップボードにコピーされました!
Ingress Operator は、OpenShift Container Platform の中核となる機能であり、追加の設定なしに有効にできます。
すべての新規 OpenShift Container Platform インストールには、ingresscontroller の名前付きのデフォルトがあります。これは、追加の Ingress コントローラーで補足できます。デフォルトの ingresscontroller が削除される場合、Ingress Operator は 1 分以内にこれを自動的に再作成します。
手順
デフォルト Ingress コントローラーを表示します。
oc describe --namespace=openshift-ingress-operator ingresscontroller/default
$ oc describe --namespace=openshift-ingress-operator ingresscontroller/defaultCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.4. Ingress Operator ステータスの表示 リンクのコピーリンクがクリップボードにコピーされました!
Ingress Operator のステータスを表示し、検査することができます。
手順
Ingress Operator ステータスを表示します。
oc describe clusteroperators/ingress
$ oc describe clusteroperators/ingressCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.5. Ingress コントローラーログの表示 リンクのコピーリンクがクリップボードにコピーされました!
Ingress コントローラーログを表示できます。
手順
Ingress コントローラーログを表示します。
oc logs --namespace=openshift-ingress-operator deployments/ingress-operator
$ oc logs --namespace=openshift-ingress-operator deployments/ingress-operatorCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.6. Ingress コントローラーステータスの表示 リンクのコピーリンクがクリップボードにコピーされました!
特定の Ingress コントローラーのステータスを表示できます。
手順
Ingress コントローラーのステータスを表示します。
oc describe --namespace=openshift-ingress-operator ingresscontroller/<name>
$ oc describe --namespace=openshift-ingress-operator ingresscontroller/<name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.7. カスタムデフォルト証明書の設定 リンクのコピーリンクがクリップボードにコピーされました!
管理者として、Secret リソースを作成し、IngressController カスタムリソース (CR) を編集して Ingress コントローラーがカスタム証明書を使用するように設定できます。
前提条件
- PEM エンコードされたファイルに証明書/キーのペアがなければなりません。ここで、証明書は信頼される認証局またはカスタム PKI で設定されたプライベートの信頼される認証局で署名されます。
- 証明書が Ingress ドメインに対して有効である必要があります。
IngressControllerCR がなければなりません。デフォルトの CR を使用できます。oc --namespace openshift-ingress-operator get ingresscontrollers
$ oc --namespace openshift-ingress-operator get ingresscontrollers NAME AGE default 10mCopy to Clipboard Copied! Toggle word wrap Toggle overflow
中間証明書がある場合、それらはカスタムデフォルト証明書が含まれるシークレットの tls.crt ファイルに組み込まれる必要があります。証明書を指定する際の順序は重要になります。サーバー証明書の後に中間証明書を一覧表示します。
手順
以下では、カスタム証明書とキーのペアが、現在の作業ディレクトリーの tls.crt および tls.key ファイルにあることを前提とします。tls.crt および tls.key を実際のパス名に置き換えます。さらに、 Secret リソースを作成し、これを IngressController CR で参照する際に、custom-certs-default を別の名前に置き換えます。
このアクションにより、Ingress コントローラーはデプロイメントストラテジーを使用して再デプロイされます。
tls.crtおよびtls.keyファイルを使用して、カスタム証明書を含むSecretをopenshift-ingressnamespace に作成します。oc --namespace openshift-ingress create secret tls custom-certs-default --cert=tls.crt --key=tls.key
$ oc --namespace openshift-ingress create secret tls custom-certs-default --cert=tls.crt --key=tls.keyCopy to Clipboard Copied! Toggle word wrap Toggle overflow IngressControllerCR を、新規証明書シークレットを参照するように更新します。oc patch --type=merge --namespace openshift-ingress-operator ingresscontrollers/default \ --patch '{"spec":{"defaultCertificate":{"name":"custom-certs-default"}}}'$ oc patch --type=merge --namespace openshift-ingress-operator ingresscontrollers/default \ --patch '{"spec":{"defaultCertificate":{"name":"custom-certs-default"}}}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 更新が正常に行われていることを確認します。
oc get --namespace openshift-ingress-operator ingresscontrollers/default \ --output jsonpath='{.spec.defaultCertificate}'$ oc get --namespace openshift-ingress-operator ingresscontrollers/default \ --output jsonpath='{.spec.defaultCertificate}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力は以下のようになります。
map[name:custom-certs-default]
map[name:custom-certs-default]Copy to Clipboard Copied! Toggle word wrap Toggle overflow 証明書シークレットの名前は、CR を更新するために使用された値に一致する必要があります。
IngressController CR が変更された後に、Ingress Operator はカスタム証明書を使用できるように Ingress コントローラーのデプロイメントを更新します。
5.8. Ingress コントローラーのスケーリング リンクのコピーリンクがクリップボードにコピーされました!
Ingress Controller は、スループットを増大させるための要件を含む、ルーティングのパフォーマンスや可用性に関する各種要件に対応するために手動でスケーリングできます。oc コマンドは、 IngressController リソースをスケーリングするために使用されます。以下の手順では、デフォルトの IngressController をスケールアップする例を示します。
手順
デフォルト
IngressControllerの現在の利用可能なレプリカ数を表示します。oc get -n openshift-ingress-operator ingresscontrollers/default -o jsonpath='{$.status.availableReplicas}'$ oc get -n openshift-ingress-operator ingresscontrollers/default -o jsonpath='{$.status.availableReplicas}' 2Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc patchコマンドを使用して、デフォルトのIngressControllerを必要なレプリカ数にスケーリングします。以下の例では、デフォルトのIngressControllerを 3 つのレプリカにスケーリングしています。oc patch -n openshift-ingress-operator ingresscontroller/default --patch '{"spec":{"replicas": 3}}' --type=merge$ oc patch -n openshift-ingress-operator ingresscontroller/default --patch '{"spec":{"replicas": 3}}' --type=merge ingresscontroller.operator.openshift.io/default patchedCopy to Clipboard Copied! Toggle word wrap Toggle overflow デフォルトの
IngressControllerが指定したレプリカ数にスケーリングされていることを確認します。oc get -n openshift-ingress-operator ingresscontrollers/default -o jsonpath='{$.status.availableReplicas}'$ oc get -n openshift-ingress-operator ingresscontrollers/default -o jsonpath='{$.status.availableReplicas}' 3Copy to Clipboard Copied! Toggle word wrap Toggle overflow
スケーリングは、必要な数のレプリカを作成するのに時間がかかるため、すぐに実行できるアクションではありません。
5.9. ルートラベルを使用した Ingress コントローラーのシャード化の設定 リンクのコピーリンクがクリップボードにコピーされました!
ルートラベルを使用した Ingress コントローラーのシャード化とは、Ingress コントローラーがルートセレクターによって選択される任意 namespace の任意のルートを提供することを意味します。
Ingress コントローラーのシャード化は、一連の Ingress コントローラー間で着信トラフィックの負荷を分散し、トラフィックを特定の Ingress コントローラーに分離する際に役立ちます。たとえば、Company A のトラフィックをある Ingress コントローラーに指定し、Company B を別の Ingress コントローラーに指定できます。
手順
router-internal.yamlファイルを編集します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow Ingress コントローラーの
router-internal.yamlファイルを適用します。oc apply -f router-internal.yaml
# oc apply -f router-internal.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow Ingress コントローラーは、
type: shardedというラベルのある namespace のルートを選択します。
5.10. namespace ラベルを使用した Ingress コントローラーのシャード化の設定 リンクのコピーリンクがクリップボードにコピーされました!
namespace ラベルを使用した Ingress コントローラーのシャード化とは、Ingress コントローラーが namespace セレクターによって選択される任意の namespace の任意のルートを提供することを意味します。
Ingress コントローラーのシャード化は、一連の Ingress コントローラー間で着信トラフィックの負荷を分散し、トラフィックを特定の Ingress コントローラーに分離する際に役立ちます。たとえば、Company A のトラフィックをある Ingress コントローラーに指定し、Company B を別の Ingress コントローラーに指定できます。
手順
router-internal.yamlファイルを編集します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow Ingress コントローラーの
router-internal.yamlファイルを適用します。oc apply -f router-internal.yaml
# oc apply -f router-internal.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow Ingress コントローラーは、
type: shardedというラベルのある namespace セレクターによって選択される namespace のルートを選択します。
5.11. 内部ロードバランサーを使用するように Ingress コントローラーを設定する リンクのコピーリンクがクリップボードにコピーされました!
クラウドプラットフォームで Ingress コントローラーを作成する場合、Ingress コントローラーはデフォルトでパブリッククラウドロードバランサーによって公開されます。管理者は、内部クラウドロードバランサーを使用する Ingress コントローラーを作成できます。
クラウドプロバイダーが Microsoft Azure の場合、ノードを参照するパブリックロードバランサーが少なくとも 1 つ必要です。これがない場合、すべてのノードがインターネットへの egress 接続を失います。
IngressController オブジェクトのスコープを変更する必要がある場合、IngressController オブジェクトを削除してから、これを再作成する必要があります。カスタムリソース (CR) の作成後に .spec.endpointPublishingStrategy.loadBalancer.scope パラメーターを変更することはできません。
実装の詳細については、Kubernetes サービスドキュメントを参照してください。
前提条件
-
ocとして知られる OpenShift コマンドラインインターフェース (CLI) をダウンロードします。 -
cluster-admin権限を持つユーザーとしてのログイン。
手順
以下の例のように、
<name>-ingress-controller.yamlという名前のファイルにIngressControllerカスタムリソース (CR) を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを実行して、直前の手順で定義された Ingress コントローラーを作成します。
oc create -f <name>-ingress-controller.yaml
$ oc create -f <name>-ingress-controller.yaml1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
<name>をIngressControllerオブジェクトの名前に置き換えます。
オプション: 以下のコマンドを実行して Ingress コントローラーが作成されていることを確認します。
oc --all-namespaces=true get ingresscontrollers
$ oc --all-namespaces=true get ingresscontrollersCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.12. クラスターを内部に配置するようにのデフォルト Ingress コントローラーを設定する リンクのコピーリンクがクリップボードにコピーされました!
削除や再作成を実行して、クラスターを内部に配置するように default Ingress Controller を設定できます。
クラウドプロバイダーが Microsoft Azure の場合、ノードを参照するパブリックロードバランサーが少なくとも 1 つ必要です。これがない場合、すべてのノードがインターネットへの egress 接続を失います。
IngressController オブジェクトのスコープを変更する必要がある場合、IngressController オブジェクトを削除してから、これを再作成する必要があります。カスタムリソース (CR) の作成後に .spec.endpointPublishingStrategy.loadBalancer.scope パラメーターを変更することはできません。
前提条件
-
ocとして知られる OpenShift コマンドラインインターフェース (CLI) をダウンロードします。 -
cluster-admin権限を持つユーザーとしてのログイン。
手順
削除や再作成を実行して、クラスターを内部に配置するように
defaultIngress Controller を設定します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.13. 追加リソース リンクのコピーリンクがクリップボードにコピーされました!
第6章 OpenShift SDN を使用したネットワークポリシーの設定 リンクのコピーリンクがクリップボードにコピーされました!
6.1. ネットワークポリシーについて リンクのコピーリンクがクリップボードにコピーされました!
Kubernetes ネットワークポリシーをサポートする Kubernetes Container Network Interface (CNI) プラグインを使用するクラスターでは、ネットワークの分離は NetworkPolicy カスタムリソース (CR) オブジェクトによって完全に制御されます。OpenShift Container Platform 4.2 では、OpenShift SDN はデフォルトのネットワーク分離モードでの NetworkPolicy の使用をサポートしています。
Kubernetes v1 NetworkPolicy 機能は、Egress ポリシータイプおよび IPBlock 以外は OpenShift Container Platform で利用できます。
ネットワークポリシーは、ホストのネットワーク namespace には適用されません。ホストのネットワークが有効にされている Pod は NetworkPolicy オブジェクトルールによる影響を受けません。
デフォルトで、プロジェクトのすべての Pod は他の Pod およびネットワークエンドポイントからアクセスできます。プロジェクトで 1 つ以上の Pod を分離するには、そのプロジェクトに NetworkPolicy オブジェクトを作成でき、許可される受信接続を指定できます。プロジェクト管理者は、各自のプロジェクト内で NetworkPolicy オブジェクトを作成し、削除できます。
Pod が 1 つ以上の NetworkPolicy オブジェクトのセレクターで一致する場合、Pod はそれらの 1 つ以上の NetworkPolicy オブジェクトで許可される接続のみを受け入れます。NetworkPolicy オブジェクトによって選択されていない Pod は完全にアクセス可能です。
以下のサンプル NetworkPolicy オブジェクトは、複数の異なるシナリオをサポートすることを示しています。
すべてのトラフィックを拒否します。
プロジェクトに「deny by default (デフォルトで拒否)」を実行させるには、すべての Pod に一致するが、トラフィックを一切許可しない NetworkPolicy オブジェクトを追加します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow OpenShift Container Platform Ingress コントローラーからの接続のみを許可します。
プロジェクトで OpenShift Container Platform Ingress コントローラーからの接続のみを許可するには、以下の NetworkPolicy オブジェクトを追加します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Ingress コントローラーが
endpointPublishingStrategy: HostNetworkで設定されている場合、Ingress コントローラー Pod はホストネットワーク上で実行されます。ホストネットワーク上で実行されている場合、Ingress コントローラーからのトラフィックにnetid:0Virtual Network ID (VNID) が割り当てられます。Ingress Operator に関連付けられる namespace のnetidは異なるため、allow-from-openshift-ingressネットワークポリシーのmatchLabelはdefaultIngress コントローラーからのトラフィックに一致しません。defaultnamespace にはnetid:0VNID が割り当てられるため、defaultnamespace にnetwork.openshift.io/policy-group: ingressでラベルを付けて、defaultIngress コントローラーからのトラフィックを許可できます。プロジェクト内の Pod からの接続のみを受け入れます。
Pod が同じプロジェクト内の他の Pod からの接続を受け入れるが、他のプロジェクトの Pod からの接続を拒否するように設定するには、以下の NetworkPolicy オブジェクトを追加します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Pod ラベルに基づいて HTTP および HTTPS トラフィックのみを許可します。
特定のラベル (以下の例の
role=frontend) の付いた Pod への HTTP および HTTPS アクセスのみを有効にするには、以下と同様の NetworkPolicy オブジェクトを追加します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow namespace および Pod セレクターの両方を使用して接続を受け入れます。
namespace と Pod セレクターを組み合わせてネットワークトラフィックのマッチングをするには、以下と同様の NetworkPolicy オブジェクトを使用できます。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
NetworkPolicy オブジェクトは加算されるものです。 つまり、複数の NetworkPolicy オブジェクトを組み合わせて複雑なネットワーク要件を満たすことができます。
たとえば、先の例で定義された NetworkPolicy オブジェクトの場合、同じプロジェト内に allow-same-namespace と allow-http-and-https ポリシーの両方を定義することができます。これにより、ラベル role=frontendの付いた Pod は各ポリシーで許可されるすべての接続を受け入れます。つまり、同じ namespace の Pod からのすべてのポート、およびすべての namespace の Pod からのポート 80 および 443 での接続を受け入れます。
6.2. サンプル NetworkPolicy オブジェクト リンクのコピーリンクがクリップボードにコピーされました!
以下は、サンプル NetworkPolicy オブジェクトにアノテーションを付けます。
6.3. NetworkPolicy オブジェクトの作成 リンクのコピーリンクがクリップボードにコピーされました!
クラスターのプロジェクトに許可される Ingress ネットワークトラフィックを記述する詳細なルールを定義するには、NetworkPolicy オブジェクトを作成できます。
前提条件
-
mode: NetworkPolicyが設定された OpenShift SDN ネットワークプラグインを使用するクラスター。このモードは OpenShiftSDN のデフォルトです。 -
ocとして知られる OpenShift コマンドラインインターフェース (CLI) をインストールします。 - クラスターにログインする必要があります。
手順
ポリシールールを作成します。
-
<policy-name>.yamlファイルを作成します。 ここで、<policy-name>はポリシールールを記述します。 作成したばかりのファイルで、以下の例のようなポリシーオブジェクトを定義します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- ポリシーオブジェクトの名前を指定します。
-
以下のコマンドを実行してポリシーオブジェクトを作成します。
oc create -f <policy-name>.yaml -n <project>
$ oc create -f <policy-name>.yaml -n <project>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下の例では、新規 NetworkPolicy オブジェクトが
project1という名前のプロジェクトに作成されます。oc create -f default-deny.yaml -n project1
$ oc create -f default-deny.yaml -n project1 networkpolicy "default-deny" createdCopy to Clipboard Copied! Toggle word wrap Toggle overflow
6.4. NetworkPolicy オブジェクトの削除 リンクのコピーリンクがクリップボードにコピーされました!
NetworkPolicy オブジェクトを削除することができます。
前提条件
-
mode: NetworkPolicyが設定された OpenShift SDN ネットワークプラグインを使用するクラスター。このモードは OpenShiftSDN のデフォルトです。 -
ocとして知られる OpenShift コマンドラインインターフェース (CLI) をインストールします。 - クラスターにログインする必要があります。
手順
NetworkPolicy オブジェクトを削除するには、以下のコマンドを実行します。
oc delete networkpolicy -l name=<policy-name>
$ oc delete networkpolicy -l name=<policy-name>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 削除する NetworkPolicy オブジェクトの名前を指定します。
6.5. NetworkPolicy オブジェクトの表示 リンクのコピーリンクがクリップボードにコピーされました!
クラスターの NetworkPolicy オブジェクトを一覧表示できます。
前提条件
-
mode: NetworkPolicyが設定された OpenShift SDN ネットワークプラグインを使用するクラスター。このモードは OpenShiftSDN のデフォルトです。 -
ocとして知られる OpenShift コマンドラインインターフェース (CLI) をインストールします。 - クラスターにログインする必要があります。
手順
クラスターで定義された NetworkPolicy オブジェクトを表示するには、以下のコマンドを実行します。
oc get networkpolicy
$ oc get networkpolicyCopy to Clipboard Copied! Toggle word wrap Toggle overflow
6.6. NetworkPolicy を使用したマルチテナント分離の設定 リンクのコピーリンクがクリップボードにコピーされました!
他のプロジェクトの Pod およびサービスから分離できるようにプロジェクトを設定できます。
前提条件
-
mode: NetworkPolicyが設定された OpenShift SDN ネットワークプラグインを使用するクラスター。このモードは OpenShiftSDN のデフォルトです。 -
ocとして知られる OpenShift コマンドラインインターフェース (CLI) をインストールします。 - クラスターにログインする必要があります。
手順
NetworkPolicy オブジェクト定義が含まれる以下のファイルを作成します。
以下を含む
allow-from-openshift-ingress.yamlという名前のファイル。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下を含む
allow-from-openshift-monitoring.yamlという名前のファイル。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
各ポリシーファイルについて、以下のコマンドを実行し、NetworkPolicy オブジェクトを作成します。
oc apply -f <policy-name>.yaml \ -n <project>
$ oc apply -f <policy-name>.yaml \1 -n <project>2 Copy to Clipboard Copied! Toggle word wrap Toggle overflow defaultIngress コントローラー設定にspec.endpointPublishingStrategy: HostNetworkの値が設定されている場合、ラベルをdefaultOpenShift Container Platform namespace に適用し、Ingress コントローラーとプロジェクト間のネットワークトラフィックを許可する必要があります。defaultIngress コントローラーがHostNetworkエンドポイント公開ストラテジーを使用するかどうかを判別します。oc get --namespace openshift-ingress-operator ingresscontrollers/default \ --output jsonpath='{.status.endpointPublishingStrategy.type}'$ oc get --namespace openshift-ingress-operator ingresscontrollers/default \ --output jsonpath='{.status.endpointPublishingStrategy.type}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 直前のコマンドによりエンドポイント公開ストラテジーが
HostNetworkとして報告される場合には、defaultnamespace にラベルを設定します。oc label namespace default 'network.openshift.io/policy-group=ingress'
$ oc label namespace default 'network.openshift.io/policy-group=ingress'Copy to Clipboard Copied! Toggle word wrap Toggle overflow
オプション: 以下のコマンドを実行し、NetworkPolicy オブジェクトが現在のプロジェクトに存在することを確認します。
oc get networkpolicy <policy-name> -o yaml
$ oc get networkpolicy <policy-name> -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以下の例では、
allow-from-openshift-ingressNetworkPolicy オブジェクトが表示されています。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.7. 新規プロジェクトのデフォルトネットワークポリシーの作成 リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、新規プロジェクトの作成時に NetworkPolicy オブジェクトを自動的に含めるように新規プロジェクトテンプレートを変更できます。
6.7.1. 新規プロジェクトのテンプレートの変更 リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、デフォルトのプロジェクトテンプレートを変更し、新規プロジェクトをカスタム要件に基づいて作成することができます。
独自のカスタムプロジェクトテンプレートを作成するには、以下を実行します。
手順
-
cluster-admin権限を持つユーザーとしてのログイン。 デフォルトのプロジェクトテンプレートを生成します。
oc adm create-bootstrap-project-template -o yaml > template.yaml
$ oc adm create-bootstrap-project-template -o yaml > template.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
オブジェクトを追加するか、または既存オブジェクトを変更することにより、テキストエディターで生成される
template.yamlファイルを変更します。 プロジェクトテンプレートは、
openshift-confignamespace に作成される必要があります。変更したテンプレートを読み込みます。oc create -f template.yaml -n openshift-config
$ oc create -f template.yaml -n openshift-configCopy to Clipboard Copied! Toggle word wrap Toggle overflow Web コンソールまたは CLI を使用し、プロジェクト設定リソースを編集します。
Web コンソールの使用
- Administration → Cluster Settings ページに移動します。
- Global Configuration をクリックし、すべての設定リソースを表示します。
- Project のエントリーを見つけ、Edit YAML をクリックします。
CLI の使用
project.config.openshift.io/clusterリソースを編集します。oc edit project.config.openshift.io/cluster
$ oc edit project.config.openshift.io/clusterCopy to Clipboard Copied! Toggle word wrap Toggle overflow
specセクションを、projectRequestTemplateおよびnameパラメーターを組み込むように更新し、アップロードされたプロジェクトテンプレートの名前を設定します。デフォルト名はproject-requestです。カスタムプロジェクトテンプレートを含むプロジェクト設定リソース
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 変更を保存した後、変更が正常に適用されたことを確認するために、新しいプロジェクトを作成します。
6.7.2. 新規プロジェクトテンプレートへのネットワークポリシーオブジェクトの追加 リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、ネットワークポリシーオブジェクトを新規プロジェクトのデフォルトテンプレートに追加できます。OpenShift Container Platform は、プロジェクトのテンプレートに指定されたすべての NetworkPolicy CR を自動的に作成します。
前提条件
-
mode: NetworkPolicyが設定された OpenShift SDN ネットワークプラグインを使用するクラスター。このモードは OpenShiftSDN のデフォルトです。 -
ocとして知られる OpenShift コマンドラインインターフェース (CLI) のインストール。 -
cluster-admin権限を持つユーザーとしてクラスターにログインする必要があります。 - 新規プロジェクトのカスタムデフォルトプロジェクトテンプレートを作成している必要があります。
手順
以下のコマンドを実行して、新規プロジェクトのデフォルトテンプレートを編集します。
oc edit template <project_template> -n openshift-config
$ oc edit template <project_template> -n openshift-configCopy to Clipboard Copied! Toggle word wrap Toggle overflow <project_template>を、クラスターに設定したデフォルトテンプレートの名前に置き換えます。デフォルトのテンプレート名はproject-requestです。テンプレートでは、各 NetworkPolicy オブジェクトを要素として
objectsパラメーターに追加します。objectsパラメーターは、1 つ以上のオブジェクトのコレクションを受け入れます。以下の例では、
objectsパラメーターのコレクションにいくつかの NetworkPolicy オブジェクトが含まれます。Copy to Clipboard Copied! Toggle word wrap Toggle overflow オプション: 以下のコマンドを実行して、新規プロジェクトを作成し、ネットワークポリシーオブジェクトが正常に作成されることを確認します。
新規プロジェクトを作成します。
oc new-project <project>
$ oc new-project <project>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
<project>を、作成しているプロジェクトの名前に置き換えます。
新規プロジェクトテンプレートのネットワークポリシーオブジェクトが新規プロジェクトに存在することを確認します。
oc get networkpolicy
$ oc get networkpolicy NAME POD-SELECTOR AGE allow-from-openshift-ingress <none> 7s allow-from-same-namespace <none> 7sCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第7章 複数ネットワーク リンクのコピーリンクがクリップボードにコピーされました!
7.1. 複数ネットワークについて リンクのコピーリンクがクリップボードにコピーされました!
Kubernetes では、コンテナーネットワークは Container Network Interface (CNI) を実装するネットワークプラグインに委任されます。
OpenShift Container Platform は、Multus CNI プラグインを使用して CNI プラグインのチェーンを許可します。クラスターのインストール時に、デフォルト の Pod ネットワークを設定します。デフォルトのネットワークは、クラスターのすべての通常のネットワークトラフィックを処理します。利用可能な CNI プラグインに基づいて 追加のネットワーク を定義し、1 つまたは複数のネットワークを Pod に割り当てることができます。必要に応じて、クラスターの複数のネットワークを追加で定義することができます。これは、スイッチまたはルーティングなどのネットワーク機能を提供する Pod を設定する場合に柔軟性を実現します。
7.1.1. 追加ネットワークの使用シナリオ リンクのコピーリンクがクリップボードにコピーされました!
データプレーンとコントロールプレーンの分離など、ネットワークの分離が必要な状況で追加のネットワークを使用することができます。トラフィックの分離は、以下のようなパフォーマンスおよびセキュリティー関連の理由で必要になります。
- パフォーマンス
- 各プレーンのトラフィック量を管理するために、2 つの異なるプレーンにトラフィックを送信できます。
- セキュリティー
- 機密トラフィックは、セキュリティー上の考慮に基づいて管理されているネットワークに送信でき、テナントまたはカスタマー間で共有できないプライベートを分離することができます。
クラスターのすべての Pod はクラスター全体のデフォルトネットワークを依然として使用し、クラスター全体での接続性を維持します。すべての Pod には、クラスター全体の Pod ネットワークに割り当てられる eth0 インターフェースがあります。Pod のインターフェースは、oc exec -it <pod_name> -- ip a コマンドを使用して表示できます。Multus CNI を使用するネットワークを追加する場合、それらの名前は net1、net2、…netN などになります。
追加のネットワークを Pod に割り当てるには、インターフェースの割り当て方法を定義する設定を作成する必要があります。それぞれのインターフェースは、NetworkAttachmentDefinition タイプのあるカスタムリソース (CR) を使用して指定します。これらの CR のそれぞれにある CNI 設定は、インターフェースの作成方法を定義します。
7.1.2. OpenShift Container Platform の追加ネットワーク リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform は、クラスターに追加のネットワークを作成するために使用する以下の CNI プラグインを提供します。
- bridge: ブリッジベースの追加ネットワークを作成することで、同じホストにある Pod が相互に、かつホストと通信できます。
- host-device: ホストデバイスの追加ネットワークを作成することで、Pod がホストシステム上の物理イーサネットネットワークデバイスにアクセスすることができます。
- macvlan: macvlan ベースの追加ネットワークを作成することで、ホスト上の Pod が物理ネットワークインターフェースを使用して他のホストやそれらのホストの Pod と通信できます。macvlan ベースの追加ネットワークに割り当てられる各 Pod には固有の MAC アドレスが割り当てられます。
- ipvlan: ipvlan ベースの追加ネットワークを作成することで、macvlan ベースの追加ネットワークと同様に、ホスト上の Pod が他のホストやそれらのホストの Pod と通信できます。macvlan ベースの追加のネットワークとは異なり、各 Pod は親の物理ネットワークインターフェースと同じ MAC アドレスを共有します。
- SR-IOV: SR-IOV ベースの追加ネットワークを作成することで、Pod を ホストシステム上の SR-IOV 対応ハードウェアの仮想機能 (VF) インターフェースに割り当てることができます。
7.2. Pod の追加のネットワークへの割り当て リンクのコピーリンクがクリップボードにコピーされました!
クラスターユーザーとして、Pod を追加のネットワークに割り当てることができます。
7.2.1. Pod の追加ネットワークへの追加 リンクのコピーリンクがクリップボードにコピーされました!
Pod を追加のネットワークに追加できます。Pod は、デフォルトネットワークで通常のクラスター関連のネットワークトラフィックを継続的に送信します。
前提条件
- Pod が追加ネットワークと同じ namespace にあること。
-
ocとして知られる OpenShift コマンドラインインターフェース (CLI) のインストール。 - クラスターにログインする必要があります。
手順
Pod を追加のネットワークに追加するには、以下の手順を実施します。
Pod リソース定義を作成し、
k8s.v1.cni.cncf.io/networksパラメーターを Pod のmetadataマッピングに追加します。k8s.v1.cni.cncf.io/networksは、1 つ以上の NetworkAttachmentDefinition カスタムリソース (CR) 名のカンマ区切りの一覧を受け入れます。metadata: annotations: k8s.v1.cni.cncf.io/networks: <network>[,<network>,...]metadata: annotations: k8s.v1.cni.cncf.io/networks: <network>[,<network>,...]1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
<network>を、Pod に関連付ける追加ネットワークの名前に置き換えます。複数の追加ネットワークを指定するには、各ネットワークをカンマで区切ります。カンマの間にはスペースを入れないでください。同じ追加ネットワークを複数回指定した場合、Pod は複数のネットワークインターフェースをそのネットワークに割り当てます。
以下の例では、2 つの追加のネットワークが Pod に割り当てられます。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを実行して Pod を作成します。
oc create -f pod.yaml
$ oc create -f pod.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow オプション: 以下のコマンドを実行して、アノテーションが Pod CR に存在することを確認します。
<name>を Pod の名前に置き換えます。oc get pod <name> -o yaml
$ oc get pod <name> -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以下の例では、
example-podPod が追加ネットワークのnet1に割り当てられています。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
k8s.v1.cni.cncf.io/networks-statusパラメーターは、オブジェクトの JSON 配列です。各オブジェクトは、Pod に割り当てられる追加のネットワークのステータスについて説明します。アノテーションの値はプレーンテキストの値として保存されます。
7.3. 追加ネットワークからの Pod の削除 リンクのコピーリンクがクリップボードにコピーされました!
クラスターユーザーとして、追加のネットワークから Pod を削除できます。
7.3.1. 追加ネットワークからの Pod の削除 リンクのコピーリンクがクリップボードにコピーされました!
追加のネットワークから Pod を削除できます。
前提条件
- クラスター用に追加のネットワークを設定している。
- 追加のネットワークが Pod に割り当てられている。
-
ocとして知られる OpenShift コマンドラインインターフェース (CLI) のインストール。 - クラスターにログインする必要があります。
手順
追加のネットワークから Pod を削除するには、以下の手順を実行します。
以下のコマンドを実行して Pod リソース定義を編集します。
<name>を、編集する Pod の名前に置き換えます。oc edit pod <name>
$ oc edit pod <name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のアクションのいずれかを実行して、Pod から追加のネットワークを削除するように
annotationsマッピングを更新します。Pod からすべての追加ネットワークを削除するには、以下の例にあるように Pod リソース定義から
k8s.v1.cni.cncf.io/networksパラメーターを削除します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
Pod から特定の追加ネットワークを削除するには、追加ネットワークの NetworkAttachmentDefinition の名前を削除して
k8s.v1.cni.cncf.io/networksパラメーターを更新します。
オプション: 以下のコマンドを実行して、Pod が追加のネットワークに接続されていないことを確認します。
<name>を Pod の名前に置き換えます。oc describe pod <name>
$ oc describe pod <name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下の例では、
example-podPod はデフォルトのクラスターネットワークのみに割り当てられています。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- デフォルトのクラスターネットワークのみが Pod に割り当てられます。
7.4. ブリッジネットワークの設定 リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、ブリッジの Container Network Interface (CNI) プラグインを使用して、クラスターの追加ネットワークを設定できます。設定時に、ノード上のすべての Pod が仮想スイッチに接続されます。各 Pod には追加のネットワークの IP アドレスが割り当てられます。
7.4.1. ブリッジ CNI プラグインを使用した追加ネットワーク割り当ての作成 リンクのコピーリンクがクリップボードにコピーされました!
Cluster Network Operator (CNO) は追加ネットワークの定義を管理します。作成する追加ネットワークを指定する場合、CNO は NetworkAttachmentDefinition カスタムリソース (CR) を自動的に作成します。
Cluster Network Operator が管理する NetworkAttachmentDefinition CR は編集しないでください。これを実行すると、追加ネットワークのネットワークトラフィックが中断する可能性があります。
前提条件
-
ocとして知られる OpenShift コマンドラインインターフェース (CLI) のインストール。 -
cluster-admin権限を持つユーザーとしてのログイン。
手順
クラスターの追加ネットワークを作成するには、以下の手順を実施します。
以下のコマンドを実行して CNO CR を編集します。
oc edit networks.operator.openshift.io cluster
$ oc edit networks.operator.openshift.io clusterCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のサンプル CR のように、作成される追加ネットワークの設定を追加して、作成している CR を変更します。
以下の YAML はブリッジ CNI プラグインを設定します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 追加ネットワーク割り当て定義の設定を指定します。
- 変更を保存し、テキストエディターを終了して、変更をコミットします。
オプション: 以下のコマンドを実行して、CNO が NetworkAttachmentDefinition CR を作成していることを確認します。CNO が CR を作成するまでに遅延が生じる可能性があります。
oc get network-attachment-definitions -n <namespace>
$ oc get network-attachment-definitions -n <namespace> NAME AGE test-network-1 14mCopy to Clipboard Copied! Toggle word wrap Toggle overflow
7.4.1.1. ブリッジの設定 リンクのコピーリンクがクリップボードにコピーされました!
ブリッジ Container Network Interface (CNI) プラグインを使用する追加ネットワーク割り当ての設定は、以下の 2 つの部分に分けて提供されます。
- Cluster Network Operator (CNO) の設定
- CNI プラグインの設定
CNO 設定では、追加ネットワーク割り当ての名前と割り当てを作成する namespace を指定します。このプラグインは、CNO 設定の rawCNIConfig パラメーターで指定される JSON オブジェクトで設定されます。
以下の YAML は、CNO の設定パラメーターについて説明しています。
Cluster Network Operator YAML の設定
以下のオブジェクトは、ブリッジ CNI プラグインの設定パラメーターについて説明しています。
ブリッジ CNI プラグイン JSON 設定オブジェクト
- 1
- CNO 設定に以前に指定した
nameパラメーターの値を指定します。 - 2
- 使用する仮想ブリッジの名前を指定します。ブリッジインターフェースがホストに存在しない場合は、これが作成されます。デフォルト値は
cni0です。 - 3
- IPAM CNI プラグインの設定オブジェクトを指定します。プラグインは、ネットワーク割り当て定義についての IP アドレスの割り当てを管理します。
- 4
- 仮想ネットワークから外すトラフィックについて IP マスカレードを有効にするには、
trueに設定します。すべてのトラフィックのソース IP アドレスは、ブリッジの IP アドレスに書き換えられます。ブリッジに IP アドレスがない場合は、この設定は影響を与えません。デフォルト値はfalseです。 - 5
- IP アドレスをブリッジに割り当てるには
trueに設定します。デフォルト値はfalseです。 - 6
- ブリッジを仮想ネットワークのデフォルトゲートウェイとして設定するには、
trueに設定します。デフォルト値はfalseです。isDefaultGatewayがtrueに設定される場合、isGatewayも自動的にtrueに設定されます。 - 7
- 仮想ブリッジの事前に割り当てられた IP アドレスの割り当てを許可するには、
trueに設定します。falseに設定される場合、重複サブセットの IPv4 アドレスまたは IPv6 アドレスが仮想ブリッジに割り当てられるとエラーが発生します。デフォルト値はfalseです。 - 8
- 仮想ブリッジが受信時に使用した仮想ポートでイーサネットフレームを送信できるようにするには、
trueに設定します。このモードは、Reflective Relay (リフレクティブリレー) としても知られています。デフォルト値はfalseです。 - 9
- ブリッジで無作為検出モード (Promiscuous Mode) を有効にするには、
trueに設定します。デフォルト値はfalseです。 - 10
- 仮想 LAN (VLAN) タグを整数値として指定します。デフォルトで、VLAN タグは割り当てません。
- 11
- 最大転送単位 (MTU) を指定された値に設定します。デフォルト値はカーネルによって自動的に設定されます。
7.4.1.1.1. ブリッジ設定の例 リンクのコピーリンクがクリップボードにコピーされました!
以下の例では、bridge-netという名前の追加のネットワークを設定します。
- 1
- CNI 設定オブジェクトは YAML 文字列として指定されます。
7.4.1.2. IPAM CNI プラグインの設定 リンクのコピーリンクがクリップボードにコピーされました!
IP アドレス管理 (IPAM) CNI プラグインは、他の CNI プラグインの IP アドレスの割り当てを管理します。DHCP を使用して、静的 IP アドレスの割り当てまたは動的 IP アドレスの割り当てのいずれかに IPAM を設定することができます。指定する DHCP サーバーは、追加のネットワークから到達可能である必要があります。
OpenShift Container Platform 4.2.0 では、Pod を、IP アドレス管理に DHCP を使用する追加ネットワークに割り当てると、Pod は起動に失敗します。これは OpenShift Container Platform 4.2.1 で修正されています。詳細は、BZ#1754686 を参照してください。
以下の JSON 設定オブジェクトは設定できるパラメーターについて説明しています。
type パラメーターを DHCP 値に設定すると、その他のパラメーターを設定することはできません。
IPAM CNI プラグイン JSON 設定オブジェクト
- 1
- IP アドレスの割り当てを管理できるようにプラグインを設定するには
staticを指定します。DHCPを指定して、DHCP サーバーが IP アドレスの割り当てを管理できるようにします。DHCPの値を指定する場合は、追加のパラメーターを指定できません。 - 2
- 仮想インターフェースに割り当てる IP アドレスを記述する配列。IPv4 と IPv6 の IP アドレスの両方がサポートされます。
- 3
10.1.1.0/24など、ワーカーノードの Pod に割り当てる CIDR 形式で指定する IP アドレスのブロック。- 4
- egress ネットワークトラフィックをルーティングするデフォルトのゲートウェイ。
- 5
- Pod 内で設定するルートを記述する配列。
- 6
- CIDR 形式の IP アドレス範囲。
- 7
- ネットワークトラフィックのルーティングに使用するゲートウェイ。
- 8
- DNS 設定。オプション。
- 9
- DNS クエリーの送信先となる 1 つ以上の IP アドレスの配列。
- 10
- ホスト名に追加するデフォルトのドメイン。たとえば、ドメインが
example.comに設定されている場合、example-hostの DNS ルックアップクエリー はexample-host.example.comとして書き換えられます。 - 11
- DNS ルックアップクエリー時に非修飾ホスト名に追加されるドメイン名の配列 (例:
example-host)。
7.4.1.2.1. 静的 IP アドレス割り当ての設定例 リンクのコピーリンクがクリップボードにコピーされました!
静的 IP アドレスの割り当てに IPAM を設定することができます。
7.4.1.2.2. 動的 IP アドレス割り当ての設定例 リンクのコピーリンクがクリップボードにコピーされました!
DHCP に IPAM を設定できます。
{
"ipam": {
"type": "DHCP"
}
}
{
"ipam": {
"type": "DHCP"
}
}
次のステップ
7.5. macvlan ネットワークの設定 リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、macvlan CNI プラグインを使用して、クラスターの追加のネットワークを設定できます。Pod がネットワークに割り当てられている場合、プラグインはホストの親インターフェースからサブインターフェースを作成します。各サブデバイスに対して固有のハードウェアの MAC アドレスが生成されます。
このプラグインがサブインターフェース用に生成する固有の MAC アドレスは、クラウドプロバイダーのセキュリティーポリシーとの互換性がない場合があります。
7.5.1. macvlan CNI プラグインを使用した追加ネットワーク割り当ての作成 リンクのコピーリンクがクリップボードにコピーされました!
Cluster Network Operator (CNO) は追加ネットワークの定義を管理します。作成する追加ネットワークを指定する場合、CNO は NetworkAttachmentDefinition カスタムリソース (CR) を自動的に作成します。
Cluster Network Operator が管理する NetworkAttachmentDefinition CR は編集しないでください。これを実行すると、追加ネットワークのネットワークトラフィックが中断する可能性があります。
前提条件
-
ocとして知られる OpenShift コマンドラインインターフェース (CLI) のインストール。 -
cluster-admin権限を持つユーザーとしてのログイン。
手順
クラスターの追加ネットワークを作成するには、以下の手順を実施します。
以下のコマンドを実行して CNO CR を編集します。
oc edit networks.operator.openshift.io cluster
$ oc edit networks.operator.openshift.io clusterCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のサンプル CR のように、作成される追加ネットワークの設定を追加して、作成している CR を変更します。
以下の YAML は、macvlan CNI プラグインを設定します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 追加ネットワーク割り当て定義の設定を指定します。
- 変更を保存し、テキストエディターを終了して、変更をコミットします。
オプション: 以下のコマンドを実行して、CNO が NetworkAttachmentDefinition CR を作成していることを確認します。CNO が CR を作成するまでに遅延が生じる可能性があります。
oc get network-attachment-definitions -n <namespace>
$ oc get network-attachment-definitions -n <namespace> NAME AGE test-network-1 14mCopy to Clipboard Copied! Toggle word wrap Toggle overflow
7.5.1.1. macvlan CNI プラグインの設定 リンクのコピーリンクがクリップボードにコピーされました!
以下の YAML は、macvlan Container Network Interface (CNI) プラグインの設定パラメーターについて説明しています。
macvlan YAML の設定
- 1
- 作成している追加ネットワーク割り当ての名前を指定します。名前は指定された
namespace内で一意である必要があります。 - 2
- ネットワークの割り当てを作成する namespace を指定します。値が指定されない場合は、
defaultnamespace が使用されます。 - 3
- 仮想インターフェースに関連付けるイーサネットインターフェース。
masterの値が指定されない場合、ホストシステムのプライマリーイーサネットインターフェースが使用されます。 - 4
- 仮想ネットワークのトラフィックの可視性を設定します。
bridge、passthru、private、またはvepaのいずれかである必要があります。modeの値が指定されない場合、デフォルトの値はbridgeになります。 - 5
- 最大転送単位 (MTU) を指定された値に設定します。デフォルト値はカーネルによって自動的に設定されます。
- 6
- IPAM CNI プラグインの設定オブジェクトを指定します。プラグインは、割り当て定義についての IP アドレスの割り当てを管理します。
7.5.1.1.1. macvlan 設定の例 リンクのコピーリンクがクリップボードにコピーされました!
以下の例では、macvlan-net という名前の追加のネットワークを設定します。
7.5.1.2. IPAM CNI プラグインの設定 リンクのコピーリンクがクリップボードにコピーされました!
IP アドレス管理 (IPAM) CNI プラグインは、他の CNI プラグインの IP アドレスの割り当てを管理します。DHCP を使用して、静的 IP アドレスの割り当てまたは動的 IP アドレスの割り当てのいずれかに IPAM を設定することができます。指定する DHCP サーバーは、追加のネットワークから到達可能である必要があります。
OpenShift Container Platform 4.2.0 では、Pod を、IP アドレス管理に DHCP を使用する追加ネットワークに割り当てると、Pod は起動に失敗します。これは OpenShift Container Platform 4.2.1 で修正されています。詳細は、BZ#1754686 を参照してください。
以下の YAML 設定は設定可能なパラメーターについて説明しています。
type パラメーターを DHCP 値に設定すると、その他のパラメーターを設定することはできません。
IPAM CNI プラグイン YAML 設定オブジェクト
ipamConfig: type: <type> ...
ipamConfig:
type: <type>
...
7.5.1.2.1. 静的 IPAM 設定 YAML リンクのコピーリンクがクリップボードにコピーされました!
以下の YAML は、静的 IP アドレスの割り当ての設定について説明しています。
静的 IPAM 設定 YAML
- 1
- 仮想インターフェースに割り当てる IP アドレスを定義するマッピングのコレクション。IPv4 と IPv6 の IP アドレスの両方がサポートされます。
- 2
10.1.1.0/24など、ワーカーノードの Pod に割り当てる CIDR 形式で指定する IP アドレスのブロック。- 3
- egress ネットワークトラフィックをルーティングするデフォルトのゲートウェイ。
- 4
- Pod 内で設定するルートを記述するマッピングのコレクション。
- 5
- CIDR 形式の IP アドレス範囲。
- 6
- ネットワークトラフィックのルーティングに使用するゲートウェイ。
- 7
- DNS 設定。オプション。
- 8
- DNS クエリーを送信する 1 つ以上の IP アドレスのコレクション。
- 9
- ホスト名に追加するデフォルトのドメイン。たとえば、ドメインが
example.comに設定されている場合、example-hostの DNS ルックアップクエリー はexample-host.example.comとして書き換えられます。 - 10
- DNS ルックアップクエリー時に非修飾ホスト名に追加されるドメイン名の配列 (例:
example-host)。
7.5.1.2.2. 動的 IPAM 設定 YAML リンクのコピーリンクがクリップボードにコピーされました!
以下の YAML は、静的 IP アドレスの割り当ての設定について説明しています。
動的 IPAM 設定 YAML
ipamConfig: type: DHCP
ipamConfig:
type: DHCP
7.5.1.2.3. 静的 IP アドレス割り当ての設定例 リンクのコピーリンクがクリップボードにコピーされました!
以下の例は、静的 IP アドレスの IPAM 設定を示しています。
7.5.1.2.4. 動的 IP アドレス割り当ての設定例 リンクのコピーリンクがクリップボードにコピーされました!
以下の例では、DHCP の IPAM 設定を示しています。
ipamConfig: type: DHCP
ipamConfig:
type: DHCP
次のステップ
7.6. IPVLAN ネットワークの設定 リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、ipvlan Container Network Interface (CNI) プラグインを使用して、クラスターの追加ネットワークを設定できます。このプラグインにより作成される仮想ネットワークは、指定する物理インターフェースに関連付けられます。
7.6.1. IPVLAN CNI プラグインを使用した追加のネットワーク割り当ての作成 リンクのコピーリンクがクリップボードにコピーされました!
Cluster Network Operator (CNO) は追加ネットワークの定義を管理します。作成する追加ネットワークを指定する場合、CNO は NetworkAttachmentDefinition カスタムリソース (CR) を自動的に作成します。
Cluster Network Operator が管理する NetworkAttachmentDefinition CR は編集しないでください。これを実行すると、追加ネットワークのネットワークトラフィックが中断する可能性があります。
前提条件
-
ocとして知られる OpenShift コマンドラインインターフェース (CLI) のインストール。 -
cluster-admin権限を持つユーザーとしてのログイン。
手順
クラスターの追加ネットワークを作成するには、以下の手順を実施します。
以下のコマンドを実行して CNO CR を編集します。
oc edit networks.operator.openshift.io cluster
$ oc edit networks.operator.openshift.io clusterCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のサンプル CR のように、作成される追加ネットワークの設定を追加して、作成している CR を変更します。
以下の YAML は IPVLAN CNI プラグインを設定します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 追加ネットワーク割り当て定義の設定を指定します。
- 変更を保存し、テキストエディターを終了して、変更をコミットします。
オプション: 以下のコマンドを実行して、CNO が NetworkAttachmentDefinition CR を作成していることを確認します。CNO が CR を作成するまでに遅延が生じる可能性があります。
oc get network-attachment-definitions -n <namespace>
$ oc get network-attachment-definitions -n <namespace> NAME AGE test-network-1 14mCopy to Clipboard Copied! Toggle word wrap Toggle overflow
7.6.1.1. IPVLAN の設定 リンクのコピーリンクがクリップボードにコピーされました!
IPVLAN Container Network Interface (CNI) プラグインを使用する追加のネットワーク割り当ての設定は、以下の 2 つの部分に分けて提供されます。
- Cluster Network Operator (CNO) の設定
- CNI プラグインの設定
CNO 設定では、追加ネットワーク割り当ての名前と割り当てを作成する namespace を指定します。このプラグインは、CNO 設定の rawCNIConfig パラメーターで指定される JSON オブジェクトで設定されます。
以下の YAML は、CNO の設定パラメーターについて説明しています。
Cluster Network Operator YAML の設定
以下のオブジェクトは、IPVLAN CNI プラグインの設定パラメーターについて説明しています。
IPVLAN CNI プラグイン JSON 設定オブジェクト
- 1
- CNO 設定に以前に指定した
nameパラメーターの値を指定します。 - 2
- 仮想ネットワークの操作モードを指定します。この値は、
l2、l3、またはl3sである必要があります。デフォルト値はl2です。 - 3
- ネットワーク割り当てに関連付けるイーサネットインターフェースを指定します。
masterが指定されない場合、デフォルトのネットワークルートのインターフェースが使用されます。 - 4
- 最大転送単位 (MTU) を指定された値に設定します。デフォルト値はカーネルによって自動的に設定されます。
- 5
- IPAM CNI プラグインの設定オブジェクトを指定します。プラグインは、割り当て定義についての IP アドレスの割り当てを管理します。
7.6.1.1.1. IPVLAN 設定例 リンクのコピーリンクがクリップボードにコピーされました!
以下の例では、ipvlan-net という名前の追加のネットワークを設定します。
- 1
- CNI 設定オブジェクトは YAML 文字列として指定されます。
7.6.1.2. IPAM CNI プラグインの設定 リンクのコピーリンクがクリップボードにコピーされました!
IP アドレス管理 (IPAM) CNI プラグインは、他の CNI プラグインの IP アドレスの割り当てを管理します。DHCP を使用して、静的 IP アドレスの割り当てまたは動的 IP アドレスの割り当てのいずれかに IPAM を設定することができます。指定する DHCP サーバーは、追加のネットワークから到達可能である必要があります。
OpenShift Container Platform 4.2.0 では、Pod を、IP アドレス管理に DHCP を使用する追加ネットワークに割り当てると、Pod は起動に失敗します。これは OpenShift Container Platform 4.2.1 で修正されています。詳細は、BZ#1754686 を参照してください。
以下の JSON 設定オブジェクトは設定できるパラメーターについて説明しています。
type パラメーターを DHCP 値に設定すると、その他のパラメーターを設定することはできません。
IPAM CNI プラグイン JSON 設定オブジェクト
- 1
- IP アドレスの割り当てを管理できるようにプラグインを設定するには
staticを指定します。DHCPを指定して、DHCP サーバーが IP アドレスの割り当てを管理できるようにします。DHCPの値を指定する場合は、追加のパラメーターを指定できません。 - 2
- 仮想インターフェースに割り当てる IP アドレスを記述する配列。IPv4 と IPv6 の IP アドレスの両方がサポートされます。
- 3
10.1.1.0/24など、ワーカーノードの Pod に割り当てる CIDR 形式で指定する IP アドレスのブロック。- 4
- egress ネットワークトラフィックをルーティングするデフォルトのゲートウェイ。
- 5
- Pod 内で設定するルートを記述する配列。
- 6
- CIDR 形式の IP アドレス範囲。
- 7
- ネットワークトラフィックのルーティングに使用するゲートウェイ。
- 8
- DNS 設定。オプション。
- 9
- DNS クエリーの送信先となる 1 つ以上の IP アドレスの配列。
- 10
- ホスト名に追加するデフォルトのドメイン。たとえば、ドメインが
example.comに設定されている場合、example-hostの DNS ルックアップクエリー はexample-host.example.comとして書き換えられます。 - 11
- DNS ルックアップクエリー時に非修飾ホスト名に追加されるドメイン名の配列 (例:
example-host)。
7.6.1.2.1. 静的 IP アドレス割り当ての設定例 リンクのコピーリンクがクリップボードにコピーされました!
静的 IP アドレスの割り当てに IPAM を設定することができます。
7.6.1.2.2. 動的 IP アドレス割り当ての設定例 リンクのコピーリンクがクリップボードにコピーされました!
DHCP に IPAM を設定できます。
{
"ipam": {
"type": "DHCP"
}
}
{
"ipam": {
"type": "DHCP"
}
}
次のステップ
7.7. ホストデバイスネットワークの設定 リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、ホストデバイス Container Network Interface (CNI) プラグインを使用して、クラスターの追加ネットワークを設定できます。このプラグインは、指定されたネットワークデバイスを、ホストのネットワーク namespace から Pod のネットワーク namespace に移動することを可能にします。
7.7.1. ホストデバイス CNI プラグインを使用した追加ネットワーク割り当ての作成 リンクのコピーリンクがクリップボードにコピーされました!
Cluster Network Operator (CNO) は追加ネットワークの定義を管理します。作成する追加ネットワークを指定する場合、CNO は NetworkAttachmentDefinition カスタムリソース (CR) を自動的に作成します。
Cluster Network Operator が管理する NetworkAttachmentDefinition CR は編集しないでください。これを実行すると、追加ネットワークのネットワークトラフィックが中断する可能性があります。
前提条件
-
ocとして知られる OpenShift コマンドラインインターフェース (CLI) のインストール。 -
cluster-admin権限を持つユーザーとしてのログイン。
手順
クラスターの追加ネットワークを作成するには、以下の手順を実施します。
以下のコマンドを実行して CNO CR を編集します。
oc edit networks.operator.openshift.io cluster
$ oc edit networks.operator.openshift.io clusterCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のサンプル CR のように、作成される追加ネットワークの設定を追加して、作成している CR を変更します。
以下の YAML は、ホストデバイス CNI プラグインを設定します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 追加ネットワーク割り当て定義の設定を指定します。
- 変更を保存し、テキストエディターを終了して、変更をコミットします。
オプション: 以下のコマンドを実行して、CNO が NetworkAttachmentDefinition CR を作成していることを確認します。CNO が CR を作成するまでに遅延が生じる可能性があります。
oc get network-attachment-definitions -n <namespace>
$ oc get network-attachment-definitions -n <namespace> NAME AGE test-network-1 14mCopy to Clipboard Copied! Toggle word wrap Toggle overflow
7.7.1.1. ホストデバイスの設定 リンクのコピーリンクがクリップボードにコピーされました!
ホストデバイス Container Network Interface (CNI) プラグインを使用する追加ネットワーク割り当ての設定は、以下の 2 つの部分に分けて提供されます。
- Cluster Network Operator (CNO) の設定
- CNI プラグインの設定
CNO 設定では、追加ネットワーク割り当ての名前と割り当てを作成する namespace を指定します。このプラグインは、CNO 設定の rawCNIConfig パラメーターで指定される JSON オブジェクトで設定されます。
以下の YAML は、CNO の設定パラメーターについて説明しています。
Cluster Network Operator YAML の設定
device、hwaddr、 kernelpath、または pciBusID のいずれかのパラメーターを設定してネットワークデバイスを指定します。
以下のオブジェクトは、ホストデバイス CNI プラグインの設定パラメーターについて説明しています。
ホストデバイス CNI プラグイン JSON 設定オブジェクト
7.7.1.1.1. ホストデバイス設定例 リンクのコピーリンクがクリップボードにコピーされました!
以下の例では、hostdev-netという名前の追加のネットワークを設定します。
- 1
- CNI 設定オブジェクトは YAML 文字列として指定されます。
7.7.1.2. IPAM CNI プラグインの設定 リンクのコピーリンクがクリップボードにコピーされました!
IP アドレス管理 (IPAM) CNI プラグインは、他の CNI プラグインの IP アドレスの割り当てを管理します。DHCP を使用して、静的 IP アドレスの割り当てまたは動的 IP アドレスの割り当てのいずれかに IPAM を設定することができます。指定する DHCP サーバーは、追加のネットワークから到達可能である必要があります。
OpenShift Container Platform 4.2.0 では、Pod を、IP アドレス管理に DHCP を使用する追加ネットワークに割り当てると、Pod は起動に失敗します。これは OpenShift Container Platform 4.2.1 で修正されています。詳細は、BZ#1754686 を参照してください。
以下の JSON 設定オブジェクトは設定できるパラメーターについて説明しています。
type パラメーターを DHCP 値に設定すると、その他のパラメーターを設定することはできません。
IPAM CNI プラグイン JSON 設定オブジェクト
- 1
- IP アドレスの割り当てを管理できるようにプラグインを設定するには
staticを指定します。DHCPを指定して、DHCP サーバーが IP アドレスの割り当てを管理できるようにします。DHCPの値を指定する場合は、追加のパラメーターを指定できません。 - 2
- 仮想インターフェースに割り当てる IP アドレスを記述する配列。IPv4 と IPv6 の IP アドレスの両方がサポートされます。
- 3
10.1.1.0/24など、ワーカーノードの Pod に割り当てる CIDR 形式で指定する IP アドレスのブロック。- 4
- egress ネットワークトラフィックをルーティングするデフォルトのゲートウェイ。
- 5
- Pod 内で設定するルートを記述する配列。
- 6
- CIDR 形式の IP アドレス範囲。
- 7
- ネットワークトラフィックのルーティングに使用するゲートウェイ。
- 8
- DNS 設定。オプション。
- 9
- DNS クエリーの送信先となる 1 つ以上の IP アドレスの配列。
- 10
- ホスト名に追加するデフォルトのドメイン。たとえば、ドメインが
example.comに設定されている場合、example-hostの DNS ルックアップクエリー はexample-host.example.comとして書き換えられます。 - 11
- DNS ルックアップクエリー時に非修飾ホスト名に追加されるドメイン名の配列 (例:
example-host)。
7.7.1.2.1. 静的 IP アドレス割り当ての設定例 リンクのコピーリンクがクリップボードにコピーされました!
静的 IP アドレスの割り当てに IPAM を設定することができます。
7.7.1.2.2. 動的 IP アドレス割り当ての設定例 リンクのコピーリンクがクリップボードにコピーされました!
DHCP に IPAM を設定できます。
{
"ipam": {
"type": "DHCP"
}
}
{
"ipam": {
"type": "DHCP"
}
}
次のステップ
7.8. SR-IOV の追加ネットワークの設定 リンクのコピーリンクがクリップボードにコピーされました!
NIC (ネットワークインターフェースカード) SR-IOV ハードウェアは、テクノロジープレビュー機能としてのみご利用いただけます。テクノロジープレビュー機能は Red Hat の実稼働環境でのサービスレベルアグリーメント (SLA) ではサポートされていないため、Red Hat では実稼働環境での使用を推奨していません。Red Hat は実稼働環境でこれらを使用することを推奨していません。これらの機能は、近々発表予定の製品機能をリリースに先駆けてご提供することにより、お客様は機能性をテストし、開発プロセス中にフィードバックをお寄せいただくことができます。
Red Hat のテクノロジープレビュー機能のサポート範囲についての詳細は、https://access.redhat.com/ja/support/offerings/techpreview/ を参照してください。
7.8.1. OpenShift Container Platform の SR-IOV ハードウェアについて リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform には、ノード上で SR-IOV ハードウェアを使用する機能が含まれます。SR-IOV ハードウェアが搭載されているノード上の Pod に SR-IOV 仮想機能 (VF) インターフェースを割り当てることができます。
SR-IOV ネットワーク Operator をデプロイして、OpenShift Container Platform コンソールを使用して SR-IOV をインストールできます。SR-IOV ネットワーク Operator は SR-IOV スタックのコンポーネントを作成し、管理します。Operator は以下の機能を提供します。
- クラスター内の SR-IOV ネットワークデバイスを検出します。
- ノード上でサポートされている SR-IOV NIC モデルを初期化します。
- ノード上に SR-IOV ネットワークデバイスプラグインをプロビジョニングします。
- ノード上に SR-IOV CNI プラグイン実行可能ファイルをプロビジョニングします。
- クラスターに Network Resources Injector をプロビジョニングします。
- SR-IOV ネットワークデバイスプラグインの設定を管理します。
- SR-IOV CNI プラグインの NetworkAttachmentDefinition カスタムリソース (CR) を生成します。
以下は、上記の各 SR-IOV コンポーネントの機能になります。
- SR-IOV ネットワークプラグインは、SR-IOV ネットワークの仮想機能 (VF) リソースを検出し、公開し、割り当てるための Kubernetes デバイスプラグインです。デバイスプラグインは、とりわけ物理デバイスでの制限されたリソースの使用を有効にするために Kubernetes で使用されます。デバイスプラグインは Kubernetes スケジューラーにリソースの可用性を認識させるため、スケジューラーはリソースが十分にあるノードで Pod をスケジュールできます。
- SR-IOV CNI プラグインは、SR-IOV デバイスプラグインから割り当てられる VF インターフェースを Pod につなぎます。
- Network Resources Injector は Kubernetes Dynamic Admission Controller Webhook であり、これは SR-IOV VF などのカスタムネットワークリソースの要求および制限のある Kubernetes Pod 仕様のパッチを適用するための機能を提供します。
Network Resource Injector はデフォルトで有効にされており、無効にすることはできません。
7.8.1.1. サポートされるデバイス リンクのコピーリンクがクリップボードにコピーされました!
以下のネットワークインターフェースカード (NIC) モデルは OpenShift Container Platform でサポートされています。
-
Intel XXV710-DA2 25G カード (ベンダー ID
0x8086およびデバイス ID0x158b) -
Mellanox MT27710 Family [ConnectX-4 Lx] 25G カード (ベンダー ID
0x15b3およびデバイス ID0x1015) -
Mellanox MT27800 Family [ConnectX-5] 100G カード (ベンダー ID
0x15b3およびデバイス ID0x1017)
7.8.1.2. SR-IOV ネットワークデバイスの自動検出 リンクのコピーリンクがクリップボードにコピーされました!
SR-IOV ネットワーク Operator は、クラスターでワーカーノード上の SR-IOV 対応ネットワークデバイスを検索します。Operator は、互換性のある SR-IOV ネットワークデバイスを提供する各ワーカーノードの SriovNetworkNodeState カスタムリソース (CR) を作成し、更新します。
1 つの CR がワーカーノードごとに作成され、ノードと同じ名前を共有します。.spec.interfaces 一覧は、ノード上のネットワークデバイスについての情報を提供します。
SriovNetworkNodeState CR は変更しないでください。Operator はこれらのリソースを自動的に作成し、管理します。
以下は、SR-IOV ネットワーク Operator によって作成される SriovNetworkNodeState CR の例です。
7.8.1.3. Pod での VF (仮想機能) の使用例 リンクのコピーリンクがクリップボードにコピーされました!
SR-IOV VF が割り当てられている Pod で Remote Direct Memory Access (RDMA) または Data Plane Development Kit (DPDK) アプリケーションを実行できます。以下の例では、Pod は RDMA モードで VF を使用しています。
以下の例は、DPDK モードの VF のある Pod を示しています。
7.8.2. SR-IOV ネットワーク Operator のインストール リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、OpenShift Container Platform CLI または Web コンソールを使用して SR-IOV ネットワーク Operator をインストールできます。
7.8.2.1. CLI を使用した Operator のインストール リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、CLI を使用して Operator をインストールできます。
前提条件
- SR-IOV に対応するハードウェアを持つノードでベアメタルハードウェアにインストールされたクラスター。
-
ocとして知られる OpenShift Container Platform コマンドラインインターフェース (CLI)。 -
cluster-admin権限を持つユーザーとしてのログイン。
手順
以下のアクションを実行して、SR-IOV ネットワーク Operator の namespace を作成します。
sriov-network-operatornamespace を定義する以下の Namespace カスタムリソース (CR) を作成し、YAML をsriov-namespace.yamlファイルに保存します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを実行して namespace を作成します。
oc create -f sriov-namespace.yaml
$ oc create -f sriov-namespace.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
以下のオブジェクトを作成して、直前の手順で作成した namespace に SR-IOV ネットワーク Operator をインストールします。
以下の OperatorGroup CR を作成し、YAML を
sriov-operatorgroup.yamlファイルに保存します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを実行して OperatorGroup CR を作成します。
oc create -f sriov-operatorgroup.yaml
$ oc create -f sriov-operatorgroup.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを実行して、次の手順に必要な
channelの値を取得します。oc get packagemanifest sriov-network-operator -n openshift-marketplace -o jsonpath='{.status.defaultChannel}'$ oc get packagemanifest sriov-network-operator -n openshift-marketplace -o jsonpath='{.status.defaultChannel}' 4.2Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下の Subscription CR を作成し、YAML を
sriov-sub.yamlファイルに保存します。Subscription の例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを実行して Subscription オブジェクトを作成します。
oc create -f sriov-sub.yaml
$ oc create -f sriov-sub.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow sriov-network-operatorプロジェクトに切り替えます。oc project sriov-network-operator
$ oc project sriov-network-operator Now using project "sriov-network-operator"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.8.2.2. Web コンソールでの Operator のインストール リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、Web コンソールを使用して Operator をインストールできます。
先のセクションで説明されているように Namespace CR および OperatorGroup CR を作成する必要があります。
手順
OpenShift Container Platform Web コンソールを使用して SR-IOV ネットワーク Operator をインストールします。
- OpenShift Container Platform Web コンソールで、Operators → OperatorHub をクリックします。
- 利用可能な Operator の一覧から SR-IOV Network Operator を選択してから Install をクリックします。
- Create Operator Subscription ページの A specific namespace on the cluster の下で、sriov-network-operator を選択します。次に、Subscribe をクリックします。
オプション: SR-IOV ネットワーク Operator が正常にインストールされていることを確認します。
- Operators → Installed Operators ページに切り替えます。
SR-IOV Network Operator がiStatus が InstallSucceeded の状態で sriov-network-operator プロジェクトに一覧表示されていることを確認します。
注記インストール時に、 Operator は Failed ステータスを表示する可能性があります。インストールが後に InstallSucceeded メッセージを出して正常に実行される場合は、Failed メッセージを無視できます。
Operator がインストール済みとして表示されない場合に、さらにトラブルシューティングを実行します。
- Operators → Installed Operators ページに移動し、Operator Subscriptions および Install Plans タブで Status の下にエラーがあるかどうかを検査します。
-
Workloads → Pods ページに移動し、
sriov-network-operatorプロジェクトで Pod のログを確認します。
7.8.3. SR-IOV ネットワークデバイスの設定 リンクのコピーリンクがクリップボードにコピーされました!
SR-IOV Network Operator は SriovNetworkNodePolicy.sriovnetwork.openshift.io カスタムリソース定義 (CRD) を OpenShift Container Platform に追加します。SR-IOV ネットワークデバイスは、SriovNetworkNodePolicy カスタムリソース (CR) を作成して設定できます。
SriovNetworkNodePolicy CR で指定された設定を適用する際に、SR-IOV Operator はノードをドレイン (解放) する可能性があり、場合によってはノードの再起動を行う場合があります。設定の変更が適用されるまでに数分の時間がかかる場合があります。エビクトされたワークロードを処理するために、クラスター内に利用可能なノードが十分にあることを前もって確認します。
設定の更新が適用された後に、sriov-network-operator namespace のすべての Pod が Running ステータスに変更されます。
前提条件
-
ocとして知られる OpenShift コマンドラインインターフェース (CLI) のインストール。 -
cluster-admin権限を持つユーザーとしてのログイン。 - SR-IOV Operator がインストールされていること。
手順
以下の SriovNetworkNodePolicy CR を作成してから、YAML を
<name>-sriov-node-network.yamlファイルに保存します。<name>をこの設定の名前に置き換えます。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- CR の名前を指定します。
- 2
- SR-IOV Operator がインストールされている namespace を指定します。
- 3
- SR-IOV デバイスプラグインのリソース名を指定します。プレフィックス
openshift.io/は Pod 仕様で参照される場合に追加されます。1 つのリソース名に複数の SriovNetworkNodePolicy CR を作成できます。 - 4
- 設定するノードを選択するノードセレクターを指定します。ユーザーは、手動で、または Kubernetes Node Feature Discovery などのツールを使ってノードにラベルを付けることを選択できます。選択したノード上の SR-IOV ネットワークデバイスのみが設定されます。SR-IOV CNI プラグインおよびデバイスプラグインは、選択されたノードにのみデプロイされます。
- 5
0から99までの整数値を指定します。数値が大きいほど優先度が低くなるため、99の優先度は10よりも低くなります。- 6
- Virtual Function の最大転送単位 (MTU) の値を指定します。MTU の値は
1から9000の範囲である必要があります。MTU を指定しない場合は、''の値を指定します。 - 7
- SR-IOV 物理ネットワークデバイス用に作成する VF (仮想機能) の数を指定します。Intel Network Interface Card (NIC) の場合、VF の数はデバイスがサポートする VF の合計よりも大きくすることはできません。Mellanox NIC の場合、VF の数は
128よりも大きくすることはできません。 - 8
nicSelectorマッピングは、Operator が設定するイーサネットデバイスを選択します。すべてのパラメーターの値を指定する必要はありません。意図せずにイーサネットデバイスを選択する可能性を最低限に抑えるために、イーサネットアダプターを正確に特定できるようにすることが推奨されます。rootDevicesを指定する場合、vendor、deviceID、またはpfNameの値も指定する必要があります。pfNameとrootDevicesの両方を同時に指定する場合、それらが同一のデバイスをポイントすることを確認します。- 9
- SR-IOV ネットワークデバイスのベンダー 16 進コードを指定します。許可される値は
8086または15b3のいずれかのみになります。 - 10
- SR-IOV ネットワークデバイスのデバイス 16 進コードを指定します。許可される値は
158b、1015、1017のみになります。 - 11
- このパラメーターは、1 つ以上のイーサネットデバイスの物理機能 (PF) 名の配列を受け入れます。
- 12
- このパラメーターは、イーサネットデバイスの物理機能についての 1 つ以上の PCI バスアドレスの配列を受け入れます。以下の形式でアドレスを指定します:
0000:02:00.1 - 13
- 仮想機能のドライバータイプを指定します。以下の値のいずれかを指定できます:
netdeviceまたはvfio-pciデフォルト値はnetdeviceです。 - 14
- RDMA モードを有効にするかどうかを指定します。デフォルト値は
falseです。Mellanox Ethernet アダプターでは、RoCE (RDMA over Converged Ethernet) モードのみがサポートされます。
注記RDMAフラグがtrueに設定される場合、引き続き RDMA 対応の VF を通常のネットワークデバイスとして使用できます。デバイスはどちらのモードでも使用できます。以下のコマンドを実行して CR を作成します。
oc create -f <filename>
$ oc create -f <filename>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
<filename>を、先の手順で作成したファイルの名前に置き換えます。
7.8.4. SR-IOV の追加ネットワークの設定 リンクのコピーリンクがクリップボードにコピーされました!
SriovNetwork Custom Resource (CR) を作成して、SR-IOV ハードウェアを使用する追加のネットワークを設定できます。SriovNetwork CR の作成時に、SR-IOV Operator は NetworkAttachmentDefinition CR を自動的に作成します。
SriovNetwork Custom Resource (CR) が running 状態の Pod に割り当てられている場合、これを変更したり、削除したりしないでください。
前提条件
-
ocとして知られる OpenShift コマンドラインインターフェース (CLI) のインストール。 -
cluster-admin権限を持つユーザーとしてのログイン。
手順
以下の SriovNetwork CR を作成してから、YAML を
<name>-sriov-network.yamlファイルに保存します。<name>を、この追加ネットワークの名前に置き換えます。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
<name>を CR の名前に置き換えます。Operator は同じ名前を持つ NetworkAttachmentDefinition CR を作成します。- 2
- SR-IOV Operator がインストールされている namespace を指定します。
- 3
<target_namespace>を NetworkAttachmentDefinition CR が作成される namespace に置き換えます。- 4
- IPAM CNI プラグインの設定オブジェクトを YAML ブロックスケーラーとして指定します。プラグインは、割り当て定義についての IP アドレスの割り当てを管理します。
- 5
<vlan>を、追加ネットワークの仮想 LAN (VLAN) ID に置き換えます。整数値は0から4095である必要があります。デフォルト値は0です。- 6
<sriov_resource_name>を、この追加ネットワークの SR-IOV ハードウェアを定義する SriovNetworkNodePolicy CR の.spec.resourceNameパラメーターの値に置き換えます。
以下のコマンドを実行して CR を作成します。
oc create -f <filename>
$ oc create -f <filename>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
<filename>を、先の手順で作成したファイルの名前に置き換えます。
オプション: 以下のコマンドを実行して、直前の手順で作成した SriovNetwork CR に関連付けられた NetworkAttachmentDefinition CR が存在することを確認します。
<namespace>を、SriovNetwork CR で指定した namespace に置き換えます。oc get net-attach-def -n <namespace>
oc get net-attach-def -n <namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.8.4.1. IPAM CNI プラグインの設定 リンクのコピーリンクがクリップボードにコピーされました!
IP アドレス管理 (IPAM) CNI プラグインは、他の CNI プラグインの IP アドレスの割り当てを管理します。DHCP を使用して、静的 IP アドレスの割り当てまたは動的 IP アドレスの割り当てのいずれかに IPAM を設定することができます。指定する DHCP サーバーは、追加のネットワークから到達可能である必要があります。
OpenShift Container Platform 4.2.0 では、Pod を、IP アドレス管理に DHCP を使用する追加ネットワークに割り当てると、Pod は起動に失敗します。これは OpenShift Container Platform 4.2.1 で修正されています。詳細は、BZ#1754686 を参照してください。
以下の JSON 設定オブジェクトは設定できるパラメーターについて説明しています。
type パラメーターを DHCP 値に設定すると、その他のパラメーターを設定することはできません。
IPAM CNI プラグイン JSON 設定オブジェクト
- 1
- IP アドレスの割り当てを管理できるようにプラグインを設定するには
staticを指定します。DHCPを指定して、DHCP サーバーが IP アドレスの割り当てを管理できるようにします。DHCPの値を指定する場合は、追加のパラメーターを指定できません。 - 2
- 仮想インターフェースに割り当てる IP アドレスを記述する配列。IPv4 と IPv6 の IP アドレスの両方がサポートされます。
- 3
10.1.1.0/24など、ワーカーノードの Pod に割り当てる CIDR 形式で指定する IP アドレスのブロック。- 4
- egress ネットワークトラフィックをルーティングするデフォルトのゲートウェイ。
- 5
- Pod 内で設定するルートを記述する配列。
- 6
- CIDR 形式の IP アドレス範囲。
- 7
- ネットワークトラフィックのルーティングに使用するゲートウェイ。
- 8
- DNS 設定。オプション。
- 9
- DNS クエリーの送信先となる 1 つ以上の IP アドレスの配列。
- 10
- ホスト名に追加するデフォルトのドメイン。たとえば、ドメインが
example.comに設定されている場合、example-hostの DNS ルックアップクエリー はexample-host.example.comとして書き換えられます。 - 11
- DNS ルックアップクエリー時に非修飾ホスト名に追加されるドメイン名の配列 (例:
example-host)。
7.8.4.1.1. 静的 IP アドレス割り当ての設定例 リンクのコピーリンクがクリップボードにコピーされました!
静的 IP アドレスの割り当てに IPAM を設定することができます。
7.8.4.1.2. 動的 IP アドレス割り当ての設定例 リンクのコピーリンクがクリップボードにコピーされました!
DHCP に IPAM を設定できます。
{
"ipam": {
"type": "DHCP"
}
}
{
"ipam": {
"type": "DHCP"
}
}
7.8.5. Pod の追加ネットワークへの追加 リンクのコピーリンクがクリップボードにコピーされました!
Pod を追加のネットワークに追加できます。Pod は、デフォルトネットワークで通常のクラスター関連のネットワークトラフィックを継続的に送信します。
Network Resources Injector は、SR-IOV CNI プラグインに関連付けられている NetworkAttachmentDefinition CR が指定されている場合に resource パラメーターを Pod CR に同時に挿入します。
前提条件
- Pod が追加ネットワークと同じ namespace にあること。
-
ocとして知られる OpenShift コマンドラインインターフェース (CLI) のインストール。 - クラスターにログインする必要があります。
- SR-IOV Operator がインストールされ、SriovNetwork CR が定義されている必要があります。
手順
Pod を追加のネットワークに追加するには、以下の手順を実施します。
Pod リソース定義を作成し、
k8s.v1.cni.cncf.io/networksパラメーターを Pod のmetadataマッピングに追加します。k8s.v1.cni.cncf.io/networksは、1 つ以上の NetworkAttachmentDefinition カスタムリソース (CR) 名のカンマ区切りの一覧を受け入れます。metadata: annotations: k8s.v1.cni.cncf.io/networks: <network>[,<network>,...]metadata: annotations: k8s.v1.cni.cncf.io/networks: <network>[,<network>,...]1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
<network>を、Pod に関連付ける追加ネットワークの名前に置き換えます。複数の追加ネットワークを指定するには、各ネットワークをカンマで区切ります。カンマの間にはスペースを入れないでください。同じ追加ネットワークを複数回指定した場合、Pod は複数のネットワークインターフェースをそのネットワークに割り当てます。
以下の例では、2 つの追加のネットワークが Pod に割り当てられます。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを実行して Pod を作成します。
oc create -f pod.yaml
$ oc create -f pod.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow オプション: 以下のコマンドを実行して、アノテーションが Pod CR に存在することを確認します。
<name>を Pod の名前に置き換えます。oc get pod <name> -o yaml
$ oc get pod <name> -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以下の例では、
example-podPod が追加ネットワークのnet1に割り当てられています。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
k8s.v1.cni.cncf.io/networks-statusパラメーターは、オブジェクトの JSON 配列です。各オブジェクトは、Pod に割り当てられる追加のネットワークのステータスについて説明します。アノテーションの値はプレーンテキストの値として保存されます。
7.9. 追加ネットワークの編集 リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、既存の追加ネットワークの設定を変更することができます。
7.9.1. 追加ネットワーク割り当て定義の変更 リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、既存の追加ネットワークに変更を加えることができます。追加ネットワークに割り当てられる既存の Pod は更新されません。
前提条件
- クラスター用に追加のネットワークを設定している。
-
ocとして知られる OpenShift コマンドラインインターフェース (CLI) のインストール。 -
cluster-admin権限を持つユーザーとしてのログイン。
手順
クラスターの追加ネットワークを編集するには、以下の手順を実行します。
以下のコマンドを実行し、デフォルトのテキストエディターで Cluster Network Operator (CNO) CR を編集します。
oc edit networks.operator.openshift.io cluster
$ oc edit networks.operator.openshift.io clusterCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
additionalNetworksコレクションで、追加ネットワークを変更内容で更新します。 - 変更を保存し、テキストエディターを終了して、変更をコミットします。
オプション: 以下のコマンドを実行して、CNO が NetworkAttachmentDefinition CR を更新していることを確認します。
<network-name>を表示する追加ネットワークの名前に置き換えます。CNO が NetworkAttachmentDefinition CR を更新して変更内容が反映されるまでに遅延が生じる可能性があります。oc get network-attachment-definitions <network-name> -o yaml
$ oc get network-attachment-definitions <network-name> -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow たとえば、以下のコンソールの出力は
net1という名前の NetworkAttachmentDefinition を表示します。oc get network-attachment-definitions net1 -o go-template='{{printf "%s\n" .spec.config}}'$ oc get network-attachment-definitions net1 -o go-template='{{printf "%s\n" .spec.config}}' { "cniVersion": "0.3.1", "type": "macvlan", "master": "ens5", "mode": "bridge", "ipam": {"type":"static","routes":[{"dst":"0.0.0.0/0","gw":"10.128.2.1"}],"addresses":[{"address":"10.128.2.100/23","gateway":"10.128.2.1"}],"dns":{"nameservers":["172.30.0.10"],"domain":"us-west-2.compute.internal","search":["us-west-2.compute.internal"]}} }Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.10. 追加ネットワークの削除 リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、追加のネットワーク割り当てを削除できます。
7.10.1. 追加ネットワーク割り当て定義の削除 リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、追加ネットワークを OpenShift Container Platform クラスターから削除できます。追加ネットワークは、割り当てられている Pod から削除されません。
OpenShift Container Platform 4.2.0 では、Cluster Network Operator 設定から削除した後に追加ネットワーク CR を手動で削除する必要があります。これは今後のリリースで修正される予定です。詳細は、BZ#1755908 を参照してくださし。
前提条件
-
ocとして知られる OpenShift コマンドラインインターフェース (CLI) のインストール。 -
cluster-admin権限を持つユーザーとしてのログイン。
手順
クラスターから追加ネットワークを削除するには、以下の手順を実行します。
以下のコマンドを実行して、デフォルトのテキストエディターで Cluster Network Operator (CNO) を編集します。
oc edit networks.operator.openshift.io cluster
$ oc edit networks.operator.openshift.io clusterCopy to Clipboard Copied! Toggle word wrap Toggle overflow 削除しているネットワーク割り当て定義の
additionalNetworksコレクションから設定を削除し、CR を変更します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
additionalNetworksコレクションの追加ネットワーク割り当てのみの設定マッピングを削除する場合、空のコレクションを指定する必要があります。
- 変更を保存し、テキストエディターを終了して、変更をコミットします。
以下のコマンドを実行して、追加ネットワークの NetworkAttachmentDefinition CR を削除します。
<name>を、削除する追加ネットワークの名前に置き換えます。oc delete network-attachment-definition <name>
$ oc delete network-attachment-definition <name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow オプション: 以下のコマンドを実行して、追加ネットワーク CR が削除されていることを確認します。
oc get network-attachment-definition --all-namespaces
$ oc get network-attachment-definition --all-namespacesCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第8章 OpenShift SDN リンクのコピーリンクがクリップボードにコピーされました!
8.1. OpenShift SDN について リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform は、Software Defined Networking (SDN) アプローチを使用して、クラスターのネットワークを統合し、OpenShift Container Platform クラスターの Pod 間の通信を可能にします。OpenShift SDN により、このような Pod ネットワークが確立され、メンテナンスされます。 OpenShift SDN は Open vSwitch (OVS) を使用してオーバーレイネットワークを設定します。
OpenShift SDN では以下のように、Pod ネットワークを設定するための SDN モードを 3 つ提供します。
- ネットワークポリシーモードは、プロジェクト管理者が NetworkPolicy オブジェクトを使用して独自の分離ポリシーを設定することを可能にします。NetworkPolicy は OpenShift Container Platform 4.2 のデフォルトモードです。
- マルチテナント モードは、Pod およびサービスのプロジェクトレベルの分離を可能にします。異なるプロジェクトの Pod は、異なるプロジェクトの Pod およびサービスにパケットを送信したり、それらからパケットを受信したりすることができません。プロジェクトの分離を無効にし、クラスター全体のすべての Pod およびサービスにネットワークトラフィックを送信したり、それらの Pod およびサービスからネットワークトラフィックを受信したりすることができます。
- サブネット モードは、すべての Pod が他のすべての Pod およびサービスと通信できる Pod ネットワークを提供します。ネットワークポリシーモードは、サブネットモードと同じ機能を提供します。
8.2. プロジェクトの egress IP の設定 リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者として、OpenShift SDN ネットワークを 1 つ以上の egress IP アドレスをプロジェクトに割り当てるように設定できます。
8.2.1. プロジェクトの egress トラフィックについての egress IP アドレスの割り当て リンクのコピーリンクがクリップボードにコピーされました!
プロジェクトの egress IP アドレスを設定することにより、指定されたプロジェクトからのすべての外部送信接続が同じ固定ソース IP アドレスを共有します。外部リソースは、egress IP アドレスに基づいて特定のプロジェクトからのトラフィックを認識できます。プロジェクトに割り当てられる egress IP アドレスは、トラフィックを特定の宛先に送信するために使用される egress ルーターとは異なります。
egress IP アドレスは、ノードのプライマリーネットワークインターフェースの追加 IP アドレスとして実装され、ノードのプライマリー IP アドレスと同じサブネットにある必要があります。
egress IP アドレスは、ifcfg-eth0 などのように Linux ネットワーク設定ファイルで設定することはできません。
一部のクラウドまたは仮想マシンソリューションを使用する場合に、プライマリーネットワークインターフェースで追加の IP アドレスを許可するには追加の設定が必要になる場合があります。
egress IP アドレスは、NetNamespace リソースの egressIPs パラメーターを設定して namespace に割り当てることができます。egress IP がプロジェクトに関連付けられた後に、 OpenShift SDN は 2 つの方法で Egress IP をホストに割り当てることを可能にします。
- 自動的に割り当てる 方法では、egress IP アドレス範囲はノードに割り当てられます。
- 手動で割り当てる 方法では、1 つ以上の egress IP アドレスの一覧がノードに割り当てられます。
egress IP アドレスを要求する namespace は、それらの egress IP アドレスをホストできるノードに一致し、egress IP アドレスはそれらのノードに割り当てられます。egressIPs パレメーターが NetNamespace リソースに設定されるものの、ノードがその egress IP アドレスをホストしない場合、namespace からの egress トラフィックはドロップされます。
ノードの高可用性は自動的に実行されます。egress IP アドレスをホストするノードが到達不可能であり、egress IP アドレスをホストできるノードがある場合、egress IP アドレスは新規ノードに移行します。到達不可能なノードが再びオンラインに戻ると、ノード間で egress IP アドレスのバランスを図るために egress IP アドレスは自動的に移行します。
手動で割り当てられた egress IP アドレスと、自動的に割り当てられた egress IP アドレスは同じノードで使用することができません。IP アドレス範囲から egress IP アドレスを手動で割り当てる場合、その範囲を自動の IP 割り当てで利用可能にすることはできません。
8.2.1.1. 自動的に割り当てられた egress IP アドレスを使用する場合の考慮事項 リンクのコピーリンクがクリップボードにコピーされました!
egress IP アドレスの自動割り当て方法を使用する場合、以下の考慮事項が適用されます。
-
各ノードの
HostSubnetリソースのegressCIDRsパラメーターを設定して、ノードでホストできる egress IP アドレスの範囲を指定します。OpenShift Container Platform は、指定する IP アドレス範囲に基づいてHostSubnetリソースのegressIPsパラメーターを設定します。 - 自動割り当てモードを使用する場合、namespace ごとに単一の egress IP アドレスのみがサポートされます。
namespace の egress IP アドレスをホストするノードに到達できない場合、OpenShift Container Platform は互換性のある egress IP アドレス範囲を持つ別のノードに egress IP アドレスを再割り当てします。自動割り当て方法は、追加の IP アドレスをノードに関連付ける柔軟性のある環境にインストールされたクラスターに最も適しています。
8.2.1.2. 手動で割り当てられた egress IP アドレスを使用する場合の考慮事項 リンクのコピーリンクがクリップボードにコピーされました!
egress IP アドレスに手動割り当て方法を使用する場合、以下の考慮事項が適用されます。
-
各ノードの
HostSubnetリソースのegressIPsパラメーターを設定して、ノードでホストできる IP アドレスを指定します。 - namespace ごとに複数の egress IP アドレスがサポートされます。
namespace に複数の egress IP アドレスがある場合、最初の egress IP アドレスをホストするノードに到達できない場合、OpenShift Container Platform は最初の egress IP アドレスが再び到達可能になるまで、次に利用可能な egress IP アドレスの使用に自動的に切り替えます。
この方法は、パブリッククラウド環境にインストールされたクラスター用に推奨されます。この場合、追加の IP アドレスをノードに関連付ける上で制限がある場合があります。
8.2.2. namespace の自動的に割り当てられた egress IP アドレスの有効化 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform では、1 つ以上のノードで特定の namespace の egress IP アドレスの自動的な割り当てを有効にできます。
前提条件
-
ocとして知られる OpenShift コマンドラインインターフェース (CLI) のインストール。 -
cluster-adminロールを持つユーザーとしてのクラスターへのアクセスがあること。
手順
以下の JSON を使用して、
NetNamespaceリソースを egress IP アドレスで更新します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow たとえば、
project1を IP アドレスの 192.168.1.100 に、project2を IP アドレスの 192.168.1.101 に割り当てるには、以下を実行します。oc patch netnamespace project1 --type=merge -p \ '{"egressIPs": ["192.168.1.100"]}' oc patch netnamespace project2 --type=merge -p \ '{"egressIPs": ["192.168.1.101"]}'$ oc patch netnamespace project1 --type=merge -p \ '{"egressIPs": ["192.168.1.100"]}' $ oc patch netnamespace project2 --type=merge -p \ '{"egressIPs": ["192.168.1.101"]}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下の JSON を使用して、各ホストの
egressCIDRsパラメーターを設定して egress IP アドレスをホストできるノードを示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow たとえば、
node1およびnode2を、192.168.1.0 から 192.168.1.255 の範囲で egress IP アドレスをホストするように設定するには、以下を実行します。oc patch hostsubnet node1 --type=merge -p \ '{"egressCIDRs": ["192.168.1.0/24"]}' oc patch hostsubnet node2 --type=merge -p \ '{"egressCIDRs": ["192.168.1.0/24"]}'$ oc patch hostsubnet node1 --type=merge -p \ '{"egressCIDRs": ["192.168.1.0/24"]}' $ oc patch hostsubnet node2 --type=merge -p \ '{"egressCIDRs": ["192.168.1.0/24"]}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow OpenShift Container Platform はバランスを取りながら特定の egress IP アドレスを利用可能なノードに自動的に割り当てます。この場合、egress IP アドレス 192.168.1.100 を
node1に、egress IP アドレス 192.168.1.101 をnode2に割り当て、その逆も行います。
8.2.3. namespace の手動で割り当てられた egress IP アドレスの設定 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform で、1 つ以上の egress IP アドレスを namespace に関連付けることができます。
前提条件
-
ocとして知られる OpenShift コマンドラインインターフェース (CLI) のインストール。 -
cluster-adminロールを持つユーザーとしてのクラスターへのアクセスがあること。
手順
以下の JSON オブジェクトを必要な IP アドレスで指定して、
NetNamespaceリソースを更新します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow たとえば、
project1プロジェクトを192.168.1.100の IP アドレスに割り当てるには、以下を実行します。oc patch netnamespace project1 --type=merge \ -p '{"egressIPs": ["192.168.1.100"]}'$ oc patch netnamespace project1 --type=merge \ -p '{"egressIPs": ["192.168.1.100"]}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow egressIPsを異なるノードの 2 つ以上の IP アドレスに設定し、高可用性を確保することができます。複数の egress IP アドレスが設定される場合、Pod は egress の一覧にある最初の IP を使用しますが、IP アドレスをホストするノードが失敗する場合、Pod は短時間の遅延の後に一覧にある次の IP の使用に切り替えます。egress IP をノードホストに手動で割り当てます。
egressIPsパラメーターを、ノードホストのHostSubnetオブジェクトに設定します。以下の JSON を使用して、そのノードホストに割り当てる必要のある任意の数の IP を含めることができます。Copy to Clipboard Copied! Toggle word wrap Toggle overflow たとえば、
node1に Egress IP192.168.1.100、192.168.1.101、および192.168.1.102が設定されるように指定するには、以下を実行します。oc patch hostsubnet node1 --type=merge -p \ '{"egressIPs": ["192.168.1.100", "192.168.1.101", "192.168.1.102"]}'$ oc patch hostsubnet node1 --type=merge -p \ '{"egressIPs": ["192.168.1.100", "192.168.1.101", "192.168.1.102"]}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 直前の例では、
project1のすべての egress トラフィックは、指定された egress IP をホストするノードにルーティングされてから、その IP アドレスに (NAT を使用して) 接続されます。
8.3. 外部 IP アドレスへのアクセスを制御するための egress ファイアウォールの設定 リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、OpenShift Container Platform クラスター外に出るプロジェクトのプロジェクについて、egress トラフィックを制限する egress ファイアウォールを作成できます。
8.3.1. egress ファイアウォールのプロジェクトでの機能 リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、 egress ファイアウォール を使用して、一部またはすべての Pod がクラスター内からアクセスできる外部ホストを制限できます。egress ファイアウォールポリシーは以下のシナリオをサポートします。
- Pod の接続を内部ホストに制限し、パブリックインターネットへの接続を開始できないようにする。
- Pod の接続をパブリックインターネットに制限し、OpenShift Container Platform クラスター外にある内部ホストへの接続を開始できないようにする。
- Pod は OpenShift Container Platform クラスター外の指定された内部サブネットまたはホストにアクセスできません。
- Pod は特定の外部ホストにのみ接続することができます。
egress ファイアウォールポリシーは、EgressNetworkPolicy カスタムリソース (CR) オブジェクトを作成し、IP アドレス範囲を CIDR 形式で指定するか、または DNS 名を指定して設定します。たとえば、指定された IP 範囲へのあるプロジェクトへのアクセスを許可する一方で、別のプロジェクトへの同じアクセスを拒否することができます。または、アプリケーション開発者の (Python) pip mirror からの更新を制限したり、更新を承認されたソースからの更新のみに強制的に制限したりすることができます。
egress ファイアウォールポリシーを設定するには、ネットワークポリシーまたはマルチテナントモードのいずれかを使用するように OpenShift SDN を設定する必要があります。
ネットワークポリシーモードを使用している場合、egress ポリシーは namespace ごとに 1 つのポリシーとのみ互換性を持ち、グローバルプロジェクトなどのネットワークを共有するプロジェクトでは機能しません。
egress ファイアウォールルールは、ルーターを通過するトラフィックには適用されません。ルート CR オブジェクトを作成するパーミッションを持つユーザーは、禁止されている宛先を参照するルートを作成することにより、egress ネットワークポリシールールをバイパスできます。
8.3.1.1. egress ファイアウォールの制限 リンクのコピーリンクがクリップボードにコピーされました!
egress ファイアウォールには以下の制限があります。
- いずれのプロジェクトも複数の EgressNetworkPolicy オブジェクトを持つことができません。
-
defaultプロジェクトは egress ネットワークポリシーを使用できません。 マルチテナントモードで OpenShift SDN ネットワークプロバイダーを使用する場合、以下の制限が適用されます。
-
グローバルプロジェクトは egress ファイアウォールを使用できません。
oc adm pod-network make-projects-globalコマンドを使用して、プロジェクトをグローバルにすることができます。 -
oc adm pod-network join-projectsコマンドを使用してマージされるプロジェクトでは、結合されたプロジェクトのいずれでも egress ファイアウォールを使用することはできません。
-
グローバルプロジェクトは egress ファイアウォールを使用できません。
上記の制限のいずれかに違反すると、プロジェクトの egress ネットワークポリシーに障害が発生し、すべての外部ネットワークトラフィックがドロップされる可能性があります。
8.3.1.2. egress ネットワークポリシールールのマッチング順序 リンクのコピーリンクがクリップボードにコピーされました!
egress ネットワークポリシールールは、最初から最後へと定義された順序で評価されます。Pod からの egress 接続に一致する最初のルールが適用されます。この接続では、後続のルールは無視されます。
8.3.1.3. DNS (Domain Name Server) 解決の仕組み リンクのコピーリンクがクリップボードにコピーされました!
egress ファイアウォールポリシールールのいずれかで DNS 名を使用する場合、ドメイン名の適切な解決には、以下の制限が適用されます。
- ドメイン名の更新は、ローカルの非権威サーバーのドメインの TTL (time to live) 値に基づいてポーリングされます。
- Pod は、必要に応じて同じローカルネームサーバーからドメインを解決する必要があります。そうしない場合、egress ファイアウォールコントローラーと Pod によって認識されるドメインの IP アドレスが異なる可能性があります。ホスト名の IP アドレスが異なる場合、egress ファイアウォールは一貫して実行されないことがあります。
- egress ファイアウォールコントローラーおよび Pod は同じローカルネームサーバーを非同期にポーリングするため、Pod は egress コントローラーが実行する前に更新された IP アドレスを取得する可能性があります。これにより、競合状態が生じます。この現時点の制限により、EgressNetworkPolicy オブジェクトのドメイン名の使用は、IP アドレスの変更が頻繁に生じないドメインの場合にのみ推奨されます。
egress ファイアウォールは、DNS 解決用に Pod が置かれるノードの外部インターフェースに Pod が常にアクセスできるようにします。
ドメイン名を egress ファイアウォールで使用し、DNS 解決がローカルノード上の DNS サーバーによって処理されない場合は、Pod でドメイン名を使用している場合には DNS サーバーの IP アドレスへのアクセスを許可する egress ファイアウォールを追加する必要があります。
8.3.2. EgressNetworkPolicy カスタムリソース (CR) オブジェクト リンクのコピーリンクがクリップボードにコピーされました!
以下の YAML は EgressNetworkPolicy CR オブジェクトについて説明しています。
8.3.2.1. EgressNetworkPolicy ルール リンクのコピーリンクがクリップボードにコピーされました!
以下の YAML は egress ファイアウォールルールオブジェクトについて説明しています。egress キーは、単一または複数のオブジェクトの配列を予想します。
egress:
- type: <type>
to:
cidrSelector: <cidr>
dnsName: <dns-name>
egress:
- type: <type>
to:
cidrSelector: <cidr>
dnsName: <dns-name>
8.3.2.2. EgressNetworkPolicy CR オブジェクトの例 リンクのコピーリンクがクリップボードにコピーされました!
以下の例では、複数の egress ファイアウォールポリシールールを定義します。
8.3.3. egress ファイアウォールポリシーオブジェクトの作成 リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、プロジェクトの egress ファイアウォールポリシーオブジェクトを作成できます。
プロジェクトに EgressNetworkPolicy オブジェクトがすでに定義されている場合、既存のポリシーを編集して egress ファイアウォールルールを変更する必要があります。
前提条件
- OpenShift SDN ネットワークプロバイダープラグインを使用するクラスター。
-
ocとして知られる OpenShift コマンドラインインターフェース (CLI) のインストール。 - クラスター管理者としてクラスターにログインする必要があります。
手順
ポリシールールを作成します。
-
<policy-name>.yamlファイルを作成します。 この場合、<policy-name>は egress ポリシールールを記述します。 - 作成したファイルで、egress ポリシーオブジェクトを定義します。
-
以下のコマンドを入力してポリシーオブジェクトを作成します。
oc create -f <policy-name>.yaml -n <project>
$ oc create -f <policy-name>.yaml -n <project>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下の例では、新規の EgressNetworkPolicy オブジェクトが
project1という名前のプロジェクトに作成されます。oc create -f default-rules.yaml -n project1
$ oc create -f default-rules.yaml -n project1 egressnetworkpolicy.network.openshift.io/default-rules createdCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
オプション: 後に変更できるように
<policy-name>.yamlを保存します。
8.4. プロジェクトの egress ファイアウォールの編集 リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、既存の egress ファイアウォールのネットワークトラフィックルールを変更できます。
8.4.1. EgressNetworkPolicy オブジェクトの編集 リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、プロジェクトの egress ファイアウォールを更新できます。
前提条件
- OpenShiftSDN ネットワークプラグインを使用するクラスター。
-
ocとして知られる OpenShift コマンドラインインターフェース (CLI) のインストール。 - クラスター管理者としてクラスターにログインする必要があります。
手順
プロジェクトの既存の egress ネットワークポリシーオブジェクトを編集するには、以下の手順を実行します。
プロジェクトの EgressNetworkPolicy オブジェクトの名前を検索します。
<project>をプロジェクトの名前に置き換えます。oc get -n <project> egressnetworkpolicy
$ oc get -n <project> egressnetworkpolicyCopy to Clipboard Copied! Toggle word wrap Toggle overflow オプション: egress ネットワークファイアウォールの作成時に EgressNetworkPolicy オブジェクトのコピーを保存しなかった場合には、以下のコマンドを入力してコピーを作成します。
oc get -n <project> \ egressnetworkpolicy <name> \ -o yaml > <filename>.yaml
$ oc get -n <project> \1 egressnetworkpolicy <name> \2 -o yaml > <filename>.yaml3 Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを入力し、EgressNetworkPolicy オブジェクトを置き換えます。
<filename>を、更新された EgressNetworkPolicy オブジェクトを含むファイルの名前に置き換えます。oc replace -f <filename>.yaml
$ oc replace -f <filename>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
8.4.2. EgressNetworkPolicy カスタムリソース (CR) オブジェクト リンクのコピーリンクがクリップボードにコピーされました!
以下の YAML は EgressNetworkPolicy CR オブジェクトについて説明しています。
8.4.2.1. EgressNetworkPolicy ルール リンクのコピーリンクがクリップボードにコピーされました!
以下の YAML は egress ファイアウォールルールオブジェクトについて説明しています。egress キーは、単一または複数のオブジェクトの配列を予想します。
egress:
- type: <type>
to:
cidrSelector: <cidr>
dnsName: <dns-name>
egress:
- type: <type>
to:
cidrSelector: <cidr>
dnsName: <dns-name>
8.4.2.2. EgressNetworkPolicy CR オブジェクトの例 リンクのコピーリンクがクリップボードにコピーされました!
以下の例では、複数の egress ファイアウォールポリシールールを定義します。
8.5. プロジェクトからの egress ファイアウォールの削除 リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、プロジェクトから egress ファイアウォールを削除して、OpenShift Container Platform クラスター外に出るプロジェクトからネットワークトラフィックについてのすべての制限を削除できます。
8.5.1. EgressNetworkPolicy オブジェクトの削除 リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、プロジェクトから Egress ファイアウォールを削除できます。
前提条件
- OpenShiftSDN ネットワークプラグインを使用するクラスター。
-
ocとして知られる OpenShift コマンドラインインターフェース (CLI) のインストール。 - クラスター管理者としてクラスターにログインする必要があります。
手順
プロジェクトの egress ネットワークポリシーオブジェクトを削除するには、以下の手順を実行します。
プロジェクトの EgressNetworkPolicy オブジェクトの名前を検索します。
<project>をプロジェクトの名前に置き換えます。oc get -n <project> egressnetworkpolicy
$ oc get -n <project> egressnetworkpolicyCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを入力し、EgressNetworkPolicy オブジェクトを削除します。
<project>をプロジェクトの名前に、<name>をオブジェクトの名前に置き換えます。oc delete -n <project> egressnetworkpolicy <name>
$ oc delete -n <project> egressnetworkpolicy <name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
8.6. マルチキャストの使用 リンクのコピーリンクがクリップボードにコピーされました!
8.6.1. マルチキャストについて リンクのコピーリンクがクリップボードにコピーされました!
IP マルチキャストを使用すると、データは多数の IP アドレスに同時に配信されます。
現時点で、マルチキャストは低帯域幅の調整またはサービスの検出での使用に最も適しており、高帯域幅のソリューションとしては適していません。
OpenShift Container Platform Pod 間のマルチキャストトラフィックはデフォルトで無効にされています。OpenShift SDN ネットワークプラグインを使用している場合、プロジェクトごとにマルチキャストを有効にできます。
networkpolicy 分離モードで OpenShift SDN ネットワークプラグインを使用する場合:
- Pod によって送信されるマルチキャストパケットは、NetworkPolicy ポリシーに関係なく、プロジェクトの他のすべての Pod に送信されます。Pod はユニキャストで通信できない場合でもマルチキャストで通信できます。
- 1 つのプロジェクトの Pod によって送信されるマルチキャストパケットは、NetworkPolicy オブジェクトがプロジェクト間の通信を許可する場合であっても、それ以外のプロジェクトの Pod に送信されることはありません。
multinenant 分離モードで OpenShift SDN ネットワークプラグインを使用する場合:
- Pod で送信されるマルチキャストパケットはプロジェクト内の他のすべての Pod に送信されます。
- あるプロジェクトの Pod によって送信されるマルチキャストパケットは、各プロジェクトが結合し、マルチキャストが結合した各プロジェクトで有効にされている場合にのみ、他のプロジェクトの Pod に送信されます。
8.6.2. Pod 間のマルチキャストの有効化 リンクのコピーリンクがクリップボードにコピーされました!
プロジェクトの Pod でマルチキャストを有効にすることができます。
前提条件
-
ocとして知られる OpenShift コマンドラインインターフェース (CLI) のインストール。 -
cluster-adminロールを持つユーザーとしてクラスターにログインする必要があります。
手順
以下のコマンドを実行し、プロジェクトのマルチキャストを有効にします。
oc annotate netnamespace <namespace> \ netnamespace.network.openshift.io/multicast-enabled=true$ oc annotate netnamespace <namespace> \1 netnamespace.network.openshift.io/multicast-enabled=trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- マルチキャストを有効にする必要のあるプロジェクトの
namespace。
8.6.3. Pod 間のマルチキャストの無効化 リンクのコピーリンクがクリップボードにコピーされました!
プロジェクトの Pod でマルチキャストを無効にすることができます。
前提条件
-
ocとして知られる OpenShift コマンドラインインターフェース (CLI) のインストール。 -
cluster-adminロールを持つユーザーとしてクラスターにログインする必要があります。
手順
以下のコマンドを実行して、マルチキャストを無効にします。
oc annotate netnamespace <namespace> \ netnamespace.network.openshift.io/multicast-enabled-$ oc annotate netnamespace <namespace> \1 netnamespace.network.openshift.io/multicast-enabled-Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- マルチキャストを無効にする必要のあるプロジェクトの
namespace。
8.7. OpenShift SDN を使用したネットワーク分離の設定 リンクのコピーリンクがクリップボードにコピーされました!
クラスターが OpenShift SDN CNI プラグインのマルチテナント分離モードを使用するように設定されている場合、各プロジェクトはデフォルトで分離されます。ネットワークトラフィックは、マルチテナント分離モードでは、異なるプロジェクトの Pod およびサービス間で許可されません。
プロジェクトのマルチテナント分離の動作を 2 つの方法で変更することができます。
- 1 つ以上のプロジェクトを結合し、複数の異なるプロジェクトの Pod とサービス間のネットワークトラフィックを可能にします。
- プロジェクトのネットワーク分離を無効にできます。これはグローバルにアクセスできるようになり、他のすべてのプロジェクトの Pod およびサービスからのネットワークトラフィックを受け入れます。グローバルにアクセス可能なプロジェクトは、他のすべてのプロジェクトの Pod およびサービスにアクセスできます。
前提条件
- クラスターは、マルチテナント分離ノードで OpenShift SDN Container Network Interface (CNI) プラグインを使用するように設定されている必要があります。
8.7.1. プロジェクトの結合 リンクのコピーリンクがクリップボードにコピーされました!
2 つ以上のプロジェクトを結合し、複数の異なるプロジェクトの Pod とサービス間のネットワークトラフィックを可能にします。
前提条件
-
ocとして知られる OpenShift コマンドラインインターフェース (CLI) のインストール。 -
cluster-adminロールを持つユーザーとしてクラスターにログインする必要があります。
手順
以下のコマンドを使用して、プロジェクトを既存のプロジェクトネットワークに参加させます。
oc adm pod-network join-projects --to=<project1> <project2> <project3>
$ oc adm pod-network join-projects --to=<project1> <project2> <project3>Copy to Clipboard Copied! Toggle word wrap Toggle overflow または、特定のプロジェクト名を指定する代わりに
--selector=<project_selector>オプションを使用し、関連付けられたラベルに基づいてプロジェクトを指定できます。オプション: 以下のコマンドを実行し、結合した Pod ネットワークを表示します。
oc get netnamespaces
$ oc get netnamespacesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 同じ Pod ネットワークのプロジェクトには、NETID 列に同じネットワーク ID があります。
8.7.2. プロジェクトの分離 リンクのコピーリンクがクリップボードにコピーされました!
他のプロジェクトの Pod およびサービスがその Pod およびサービスにアクセスできないようにするためにプロジェクトを分離することができます。
前提条件
-
ocとして知られる OpenShift コマンドラインインターフェース (CLI) のインストール。 -
cluster-adminロールを持つユーザーとしてクラスターにログインする必要があります。
手順
クラスターのプロジェクトを分離するには、以下のコマンドを実行します。
oc adm pod-network isolate-projects <project1> <project2>
$ oc adm pod-network isolate-projects <project1> <project2>Copy to Clipboard Copied! Toggle word wrap Toggle overflow または、特定のプロジェクト名を指定する代わりに
--selector=<project_selector>オプションを使用し、関連付けられたラベルに基づいてプロジェクトを指定できます。
8.7.3. プロジェクトのネットワーク分離の無効化 リンクのコピーリンクがクリップボードにコピーされました!
プロジェクトのネットワーク分離を無効にできます。
前提条件
-
ocとして知られる OpenShift コマンドラインインターフェース (CLI) のインストール。 -
cluster-adminロールを持つユーザーとしてクラスターにログインする必要があります。
手順
プロジェクトの以下のコマンドを実行します。
oc adm pod-network make-projects-global <project1> <project2>
$ oc adm pod-network make-projects-global <project1> <project2>Copy to Clipboard Copied! Toggle word wrap Toggle overflow または、特定のプロジェクト名を指定する代わりに
--selector=<project_selector>オプションを使用し、関連付けられたラベルに基づいてプロジェクトを指定できます。
8.8. kube-proxy の設定 リンクのコピーリンクがクリップボードにコピーされました!
Kubernetes メットワークプロキシー (kube-proxy) は各ノードで実行され、Cluster Network Operator (CNO) で管理されます。kube-proxy は、サービスに関連付けられたエンドポイントの接続を転送するためのネットワークルールを維持します。
8.8.1. iptables ルールの同期について リンクのコピーリンクがクリップボードにコピーされました!
同期の期間は、Kubernetes ネットワークプロキシー (kube-proxy) がノードで iptables ルールを同期する頻度を定めます。
同期は、以下のイベントのいずれかが生じる場合に開始します。
- サービスまたはエンドポイントのクラスターへの追加、またはクラスターからの削除などのイベントが発生する。
- 最後の同期以後の時間が kube-proxy に定義される同期期間を超過している。
8.8.2. kube-proxy 設定の変化 リンクのコピーリンクがクリップボードにコピーされました!
クラスターの Kubernetes ネットワークプロキシー設定を変更することができます。
前提条件
-
ocとして知られる OpenShift コマンドラインインターフェース (CLI) のインストール。 -
cluster-adminロールで実行中のクラスターにログインします。
手順
以下のコマンドを実行して、
Network.operator.openshift.ioカスタムリソース (CR) を編集します。oc edit network.operator.openshift.io cluster
$ oc edit network.operator.openshift.io clusterCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のサンプル CR のように、kube-proxy 設定への変更内容で、CR の
kubeProxyConfigパラメーターを変更します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow ファイルを保存し、テキストエディターを編集します。
構文は、ファイルを保存し、エディターを終了する際に
ocコマンドによって検証されます。変更内容に構文エラーが含まれる場合、エディターはファイルを開き、エラーメッセージを表示します。以下のコマンドを実行して、設定の更新を確認します。
oc get networks.operator.openshift.io -o yaml
$ oc get networks.operator.openshift.io -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow コマンドは、以下の例のような出力を返します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow オプション: 以下のコマンドを実行し、Cluster Network Operator が設定変更を受け入れていることを確認します。
oc get clusteroperator network
$ oc get clusteroperator network NAME VERSION AVAILABLE PROGRESSING DEGRADED SINCE network 4.1.0-0.9 True False False 1mCopy to Clipboard Copied! Toggle word wrap Toggle overflow 設定の更新が正常に適用されると、
AVAILABLEフィールドがTrueになります。
8.8.3. kube-proxy 設定パラメーター リンクのコピーリンクがクリップボードにコピーされました!
以下の kubeProxyConfig パラメーターを変更することができます。
| パラメーター | 説明 | 値 | デフォルト |
|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
第9章 ルートの作成 リンクのコピーリンクがクリップボードにコピーされました!
9.1. ルート設定 リンクのコピーリンクがクリップボードにコピーされました!
9.1.1. ルートのタイムアウトの設定 リンクのコピーリンクがクリップボードにコピーされました!
Service Level Availability (SLA) で必要とされる、低タイムアウトが必要なサービスや、バックエンドでの処理速度が遅いケースで高タイムアウトが必要なサービスがある場合は、既存のルートに対してデフォルトのタイムアウトを設定することができます。
前提条件
- 実行中のクラスターでデプロイ済みの Ingress コントローラーが必要になります。
手順
oc annotateコマンドを使用して、ルートにタイムアウトを追加します。oc annotate route <route_name> \ --overwrite haproxy.router.openshift.io/timeout=<timeout><time_unit>$ oc annotate route <route_name> \ --overwrite haproxy.router.openshift.io/timeout=<timeout><time_unit>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- サポートされる時間単位は、マイクロ秒 (us)、ミリ秒 (ms)、秒 (s)、分 (m)、時間 (h)、または日 (d) です。
以下の例では、2 秒のタイムアウトを
myrouteという名前のルートに設定します。oc annotate route myroute --overwrite haproxy.router.openshift.io/timeout=2s
$ oc annotate route myroute --overwrite haproxy.router.openshift.io/timeout=2sCopy to Clipboard Copied! Toggle word wrap Toggle overflow
9.1.2. HTTP Strict Transport Security の有効化 リンクのコピーリンクがクリップボードにコピーされました!
HTTP Strict Transport Security (HSTS) ポリシーは、ホストで HTTPS トラフィックのみを許可するセキュリティーの拡張機能です。デフォルトで、すべての HTTP 要求はドロップされます。これは、web サイトとの対話の安全性を確保したり、ユーザーのためにセキュアなアプリケーションを提供するのに役立ちます。
HSTS が有効にされると、HSTS はサイトから Strict Transport Security ヘッダーを HTTPS 応答に追加します。リダイレクトするルートで insecureEdgeTerminationPolicy 値を使用し、HTTP を HTTPS に送信するようにします。ただし、HSTS が有効にされている場合は、要求の送信前にクライアントがすべての要求を HTTP URL から HTTPS に変更するためにリダイレクトの必要がなくなります。これはクライアントでサポートされる必要はなく、max-age=0 を設定することで無効にできます。
HSTS はセキュアなルート (edge termination または re-encrypt) でのみ機能します。この設定は、HTTP またはパススルールートには適していません。
手順
ルートに対して HSTS を有効にするには、
haproxy.router.openshift.io/hsts_header値を edge termination または re-encrypt ルートに追加します。apiVersion: v1 kind: Route metadata: annotations: haproxy.router.openshift.io/hsts_header: max-age=31536000;includeSubDomains;preloadapiVersion: v1 kind: Route metadata: annotations: haproxy.router.openshift.io/hsts_header: max-age=31536000;includeSubDomains;preload1 2 3 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
max-ageは唯一の必須パラメーターです。これは、HSTS ポリシーが有効な期間 (秒単位) を測定します。クライアントは、ホストから HSTS ヘッダーのある応答を受信する際には常にmax-ageを更新します。max-ageがタイムアウトになると、クライアントはポリシーを破棄します。- 2
includeSubDomainsはオプションです。これが含まれる場合、クライアントに対し、ホストのすべてのサブドメインがホストと同様に処理されるように指示します。- 3
preloadはオプションです。max-ageが 0 より大きい場合、preloadをhaproxy.router.openshift.io/hsts_headerに組み込むことにより、外部サービスはこのサイトをそれぞれの HSTS プリロード一覧に含めることができます。たとえば、Google などのサイトはpreloadが設定されているサイトの一覧を作成します。ブラウザーはこれらの一覧を使用し、サイトと対話する前でも HTTPS 経由で通信できるサイトを判別できます。preload設定がない場合、ブラウザーはヘッダーを取得するために HTTPS 経由でサイトと通信している必要があります。
9.1.3. スループット関連の問題のトラブルシューティング リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform でデプロイされるアプリケーションでは、特定のサービス間で非常に長い待ち時間が発生するなど、ネットワークのスループットの問題が生じることがあります。
Pod のログが問題の原因を指摘しない場合は、以下の方法を使用してパフォーマンスの問題を分析します。
ping または tcpdump などのパケットアナライザーを使用して Pod とそのノード間のトラフィックを分析します。
たとえば、問題を生じさせる動作を再現している間に各ノードで tcpdump ツールを実行します。両サイトでキャプチャーしたデータを確認し、送信および受信タイムスタンプを比較して Pod への/からのトラフィックの待ち時間を分析します。待ち時間は、ノードのインターフェースが他の Pod やストレージデバイス、またはデータプレーンからのトラフィックでオーバーロードする場合に OpenShift Container Platform で発生する可能性があります。
tcpdump -s 0 -i any -w /tmp/dump.pcap host <podip 1> && host <podip 2>
$ tcpdump -s 0 -i any -w /tmp/dump.pcap host <podip 1> && host <podip 2>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
podipは Pod の IP アドレスです。oc get pod <pod_name> -o wideコマンドを実行して Pod の IP アドレスを取得します。
tcpdump は 2 つの Pod 間のすべてのトラフィックが含まれる
/tmp/dump.pcapのファイルを生成します。理想的には、ファイルサイズを最小限に抑えるために問題を再現するすぐ前と問題を再現したすぐ後ににアナライザーを実行することが良いでしょう。以下のようにノード間でパケットアナライザーを実行することもできます (式から SDN を排除する)。tcpdump -s 0 -i any -w /tmp/dump.pcap port 4789
$ tcpdump -s 0 -i any -w /tmp/dump.pcap port 4789Copy to Clipboard Copied! Toggle word wrap Toggle overflow ストリーミングのスループットおよび UDP スループットを測定するために iperf などの帯域幅測定ツールを使用します。ボトルネックの特定を試行するには、最初に Pod から、次にノードからツールを実行します。
- iperf のインストールおよび使用についての詳細は、こちらの Red Hat ソリューションを参照してください。
9.1.4. Cookie に使用によるルートのステートフル性の維持 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform は、すべてのトラフィックを同じエンドポイントにヒットさせることによりステートフルなアプリケーションのトラフィックを可能にするスティッキーセッションを提供します。ただし、エンドポイント Pod が再起動、スケーリング、または設定の変更などによって終了する場合、このステートフル性はなくなります。
OpenShift Container Platform は Cookie を使用してセッションの永続化を設定できます。Ingress コントローラーはユーザー要求を処理するエンドポイントを選択し、そのセッションの Cookie を作成します。Cookie は要求の応答として戻され、ユーザーは Cookie をセッションの次の要求と共に送り返します。Cookie は Ingress コントローラーに対し、セッションを処理しているエンドポイントを示し、クライアント要求が Cookie を使用して同じ Pod にルーティングされるようにします。
9.1.4.1. Cookie を使用したルートのアノテーション リンクのコピーリンクがクリップボードにコピーされました!
ルート用に自動生成されるデフォルト名を上書きするために Cookie 名を設定できます。これにより、ルートトラフィックを受信するアプリケーションが Cookie 名を認識できるようになります。Cookie を削除すると、次の要求でエンドポイントの再選択が強制的に実行される可能性があります。そのためサーバーがオーバーロードしている場合には、クライアントからの要求を取り除き、それらの再分配を試行します。
手順
必要な Cookie 名でルートにアノテーションを付けます。
oc annotate route <route_name> router.openshift.io/<cookie_name>="-<cookie_annotation>"
$ oc annotate route <route_name> router.openshift.io/<cookie_name>="-<cookie_annotation>"Copy to Clipboard Copied! Toggle word wrap Toggle overflow たとえば、
my_cookie_annotationというアノテーションでmy_routeにmy_cookieという Cookie 名のアノテーションを付けるには、以下を実行します。oc annotate route my_route router.openshift.io/my_cookie="-my_cookie_annotation"
$ oc annotate route my_route router.openshift.io/my_cookie="-my_cookie_annotation"Copy to Clipboard Copied! Toggle word wrap Toggle overflow Cookie を保存し、ルートにアクセスします。
curl $my_route -k -c /tmp/my_cookie
$ curl $my_route -k -c /tmp/my_cookieCopy to Clipboard Copied! Toggle word wrap Toggle overflow
9.1.5. ルート固有のアノテーション リンクのコピーリンクがクリップボードにコピーされました!
Ingress コントローラーは、公開するすべてのルートのデフォルトオプションを設定できます。個別のルートは、アノテーションに個別の設定を指定して、デフォルトの一部を上書きできます。
| 変数 | 説明 | デフォルトで使用される環境変数 |
|---|---|---|
|
|
ロードバランシングアルゴリズムを設定します。使用できるオプションは |
passthrough ルートの |
|
|
関連の接続を追跡する cookie の使用を無効にします。 | |
|
| このルートに使用するオプションの cookie を指定します。名前は、大文字、小文字、数字、"_" または "-" を任意に組み合わせて指定する必要があります。デフォルトは、ルートのハッシュ化された内部キー名です。 | |
|
| ルーターからバッキングされる Pod に対して許容される接続最大数を設定します。注意: Pod が複数ある場合には、それぞれに対応する接続数を設定できますが、ルーターが複数ある場合には、ルーター間の連携がなく、それぞれの接続回数はルーターの数と同じとなります。ただし、複数のルーターがある場合は、それらのルーター間で調整は行われず、それぞれがこれに複数回接続する可能性があります。設定されていない場合または 0 に設定されている場合には制限はありません。 | |
|
|
レート制限機能を有効にするために | |
|
| IP アドレスで共有される同時 TCP 接続の数を制限します。 | |
|
| IP アドレスが HTTP 要求を実行できるレートを制限します。 | |
|
| IP アドレスが TCP 接続を行うレートを制限します。 | |
|
| ルートのサーバー側のタイムアウトを設定します。(TimeUnits) |
|
|
| バックエンドのヘルスチェックの間隔を設定します。(TimeUnits) |
|
|
| ルートのホワイトリストを設定します。 | |
|
| edge terminated または re-encrypt ルートの Strick-Transport-Security ヘッダーを設定します。 |
環境変数を編集することはできません。
ルート設定のカスタムタイムアウト
- 1
- HAProxy 対応の単位 (
us、ms、s、m、h、d) で新規のタイムアウトを指定します。単位が指定されていない場合は、msがデフォルトになります。
passthrough ルートのサーバー側のタイムアウトを低く設定し過ぎると、WebSocket 接続がそのルートで頻繁にタイムアウトする可能性があります。
9.2. セキュリティー保護されたルート リンクのコピーリンクがクリップボードにコピーされました!
以下のセクションでは、カスタム証明書を使用して re-encrypt および edge ルートを作成する方法を説明します。
パブリックエンドポイントを使用して Microsoft Azure にルートを作成する場合、リソース名は制限されます。特定の用語を使用するリソースを作成することはできません。Azure が制限する語の一覧は、Azure ドキュメントの「Resolve reserved resource name errors」 を参照してください。
9.2.1. カスタム証明書を使用した re-encrypt ルートの作成 リンクのコピーリンクがクリップボードにコピーされました!
oc create route コマンドを使用し、カスタム証明書と共に reencrypt TLS termination を使用してセキュアなルートを設定できます。
前提条件
- PEM エンコードされたファイルに証明書/キーのペアがなければなりません。 ここで、証明書はルートホストに対して有効である必要があります。
- 証明書チェーンを完了する PEM エンコードされたファイルの別の CA 証明書が必要です。
- PEM エンコードされたファイルの別の宛先 CA 証明書が必要です。
-
公開する必要のある
Serviceリソースが必要です。
パスワードで保護されるキーファイルはサポートされません。キーファイルからパスフレーズを削除するには、以下のコマンドを使用します。
openssl rsa -in password_protected_tls.key -out tls.key
$ openssl rsa -in password_protected_tls.key -out tls.key
手順
この手順では、カスタム証明書および reencrypt TLS termination を使用して Route リソースを作成します。以下では、証明書/キーのペアが現在の作業ディレクトリーの tls.crt および tls.key ファイルにあることを前提としています。また、Ingress コントローラーがサービスの証明書を信頼できるように宛先 CA 証明書を指定する必要もあります。必要な場合には、証明書チェーンを完了するために CA 証明書を指定することもできます。tls.crt、 tls.key、cacert.crt、および (オプションで) ca.crt を実際のパス名に置き換えます。frontend を、公開する必要のある Service リソースに置き換えます。www.example.com を適切な名前に置き換えます。
reencrypt TLS 終端およびカスタム証明書を使用してセキュアな
Routeリソースを作成します。oc create route reencrypt --service=frontend --cert=tls.crt --key=tls.key --dest-ca-cert=destca.crt --ca-cert=ca.crt --hostname=www.example.com
$ oc create route reencrypt --service=frontend --cert=tls.crt --key=tls.key --dest-ca-cert=destca.crt --ca-cert=ca.crt --hostname=www.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 結果として生成される
Routeリソースを検査すると、以下のようになります。セキュアなルートの YAML 定義
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 他のオプションについては、
oc create route reencrypt --helpを参照してください。
9.2.2. カスタム証明書を使用した edge ルートの作成 リンクのコピーリンクがクリップボードにコピーされました!
oc create route コマンドを使用し、edge TLS termination とカスタム証明書を使用してセキュアなルートを設定できます。edge ルートの場合、Ingress コントローラーは、トラフィックを宛先 Pod に転送する前に TLS 暗号を終了します。ルートは、Ingress コントローラーがルートに使用する TLS 証明書およびキーを指定します。
前提条件
- PEM エンコードされたファイルに証明書/キーのペアがなければなりません。 ここで、証明書はルートホストに対して有効である必要があります。
- 証明書チェーンを完了する PEM エンコードされたファイルの別の CA 証明書が必要です。
-
公開する必要のある
Serviceリソースが必要です。
パスワードで保護されるキーファイルはサポートされません。キーファイルからパスフレーズを削除するには、以下のコマンドを使用します。
openssl rsa -in password_protected_tls.key -out tls.key
$ openssl rsa -in password_protected_tls.key -out tls.key
手順
この手順では、カスタム証明書および edge TLS termination を使用して Route リソースを作成します。以下では、証明書/キーのペアが現在の作業ディレクトリーの tls.crt および tls.key ファイルにあることを前提としています。必要な場合には、証明書チェーンを完了するために CA 証明書を指定することもできます。tls.crt、 tls.key、および (オプションで) ca.crt を実際のパス名に置き換えます。frontend を、公開する必要のある Service リソースに置き換えます。www.example.com を適切な名前に置き換えます。
edge TLS termination およびカスタム証明書を使用して、セキュアな
Routeリソースを作成します。oc create route edge --service=frontend --cert=tls.crt --key=tls.key --ca-cert=ca.crt --hostname=www.example.com
$ oc create route edge --service=frontend --cert=tls.crt --key=tls.key --ca-cert=ca.crt --hostname=www.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 結果として生成される
Routeリソースを検査すると、以下のようになります。セキュアなルートの YAML 定義
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 他のオプションについては、
oc create route edge --helpを参照してください。
第10章 ingress クラスタートラフィックの設定 リンクのコピーリンクがクリップボードにコピーされました!
10.1. ingress クラスタートラフィックの設定の概要 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform は、クラスター内で実行されるサービスを使ってクラスター外からの通信を可能にする方法を提供します。
以下の方法が推奨されます。以下は、これらの方法の優先される順です。
- HTTP/HTTPS を使用する場合は Ingress コントローラーを使用する。
- HTTPS 以外の TLS で暗号化されたプロトコルを使用する場合、たとえば、SNI ヘッダーを使用する TLS の場合は、Ingress コントローラーを使用します。
-
それ以外の場合は、ロードバランサー、外部 IP、または
NodePortを使用します。
| 方法 | 目的 |
|---|---|
| HTTP/HTTPS トラフィックおよび HTTPS 以外の TLS で暗号化されたプロトコル (TLS と SNI ヘッダーの使用など) へのアクセスを許可します。 | |
| プールから割り当てられた IP アドレスを使った非標準ポートへのトラフィックを許可します。 | |
| 特定の IP アドレスを使った非標準ポートへのトラフィックを許可します。 | |
| クラスターのすべてのノードでサービスを公開します。 |
10.2. Ingress コントローラーを使用した Ingress クラスターの設定 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform は、クラスター内で実行されるサービスを使ってクラスター外からの通信を可能にする方法を提供します。この方法は Ingress コントローラーを使用します。
10.2.1. Ingress コントローラーおよびルートの使用 リンクのコピーリンクがクリップボードにコピーされました!
Ingress Operator は Ingress コントローラーおよびワイルドカード DNS を管理します。
Ingress コントローラーの使用は、OpenShift Container Platform クラスターへの外部アクセスを許可するための最も一般的な方法です。
Ingress コントローラーは外部要求を許可し、設定されたルートに基づいてそれらをプロキシー送信するよう設定されます。これは SNI を使用する HTTP、HTTPS、および SNI を使用する TLS に制限されますが、これは SNI を使用する TLS で機能する Web アプリケーションやサービスには十分な設定です。
管理者と連携して Ingress コントローラーを設定します。外部要求を許可し、設定されたルートに基づいてそれらをプロキシー送信するように Ingress コントローラーを設定します。
管理者はワイルドカード DNS エントリーを作成してから Ingress コントローラーを設定できます。その後は管理者に問い合わせることなく edge Ingress コントローラーと連携できます。
一連のルートが各種プロジェクトで作成される場合、ルートのセット全体が一連の Ingress コントローラーで利用可能になります。それぞれの Ingress コントローラーはルートのセットからのルートを許可します。デフォルトで、すべての Ingress コントローラーはすべてのルートを許可します。
Ingress コントローラー:
- デフォルトでは 2 つのレプリカがあるので、これは 2 つのワーカーノードで実行する必要があります。
- 追加のノードにレプリカを組み込むためにスケールアップすることができます。
このセクションの手順では、クラスターの管理者が事前に行っておく必要のある前提条件があります。
前提条件
以下の手順を開始する前に、管理者は以下の条件を満たしていることを確認する必要があります。
- 要求がクラスターに到達できるように、クラスターネットワーク環境に対して外部ポートをセットアップします。
クラスター管理者ロールを持つユーザーが 1 名以上いることを確認します。このロールをユーザーに追加するには、以下のコマンドを実行します。
oc adm policy add-cluster-role-to-user cluster-admin username
oc adm policy add-cluster-role-to-user cluster-admin usernameCopy to Clipboard Copied! Toggle word wrap Toggle overflow - OpenShift Container Platform クラスターを、1 つ以上のマスターと 1 つ以上のノード、およびクラスターへのネットワークアクセスのあるクラスター外のシステムと共に用意します。この手順では、外部システムがクラスターと同じサブセットにあることを前提とします。別のサブセットの外部システムに必要な追加のネットワーク設定については、このトピックでは扱いません。
10.2.2. プロジェクトおよびサービスの作成 リンクのコピーリンクがクリップボードにコピーされました!
公開するプロジェクトおよびサービスが存在しない場合、最初にプロジェクトを作成し、次にサービスを作成します。
プロジェクトおよびサービスがすでに存在する場合は、サービスを公開してルートを作成する手順に進みます。
前提条件
-
クラスター管理者として
ocCLI をインストールし、ログインします。
手順
サービスの新規プロジェクトを作成します。
oc new-project <project_name>
$ oc new-project <project_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下は例になります。
oc new-project myproject
$ oc new-project myprojectCopy to Clipboard Copied! Toggle word wrap Toggle overflow oc new-appコマンドを使用してサービスを作成します。以下は例になります。oc new-app \ -e MYSQL_USER=admin \ -e MYSQL_PASSWORD=redhat \ -e MYSQL_DATABASE=mysqldb \ registry.redhat.io/rhscl/mysql-80-rhel7$ oc new-app \ -e MYSQL_USER=admin \ -e MYSQL_PASSWORD=redhat \ -e MYSQL_DATABASE=mysqldb \ registry.redhat.io/rhscl/mysql-80-rhel7Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを実行して新規サービスが作成されていることを確認します。
oc get svc -n myproject
$ oc get svc -n myproject NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE mysql-80-rhel7 ClusterIP 172.30.63.31 <none> 3306/TCP 4m55sCopy to Clipboard Copied! Toggle word wrap Toggle overflow デフォルトで、新規サービスには外部 IP アドレスがありません。
10.2.3. ルートの作成によるサービスの公開 リンクのコピーリンクがクリップボードにコピーされました!
oc expose コマンドを使用して、サービスをルートとして公開することができます。
手順
サービスを公開するには、以下を実行します。
- OpenShift Container Platform にログインします。
公開するサービスが置かれているプロジェクトにログインします。
oc project project1
$ oc project project1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを実行してルートを公開します。
oc expose service <service_name>
$ oc expose service <service_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下は例になります。
oc expose service mysql-80-rhel7
$ oc expose service mysql-80-rhel7 route "mysql-80-rhel7" exposedCopy to Clipboard Copied! Toggle word wrap Toggle overflow cURL などのツールを使用し、サービスのクラスター IP アドレスを使用してサービスに到達できることを確認します。
curl <pod_ip>:<port>
$ curl <pod_ip>:<port>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下は例になります。
curl 172.30.131.89:3306
$ curl 172.30.131.89:3306Copy to Clipboard Copied! Toggle word wrap Toggle overflow このセクションの例では、クライアントアプリケーションを必要とする MySQL サービスを使用しています。
Got packets out of orderのメッセージと共に文字ストリングを取得する場合は、このサービスに接続されていることになります。MySQL クライアントがある場合は、標準 CLI コマンドでログインします。
mysql -h 172.30.131.89 -u admin -p
$ mysql -h 172.30.131.89 -u admin -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. MySQL [(none)]>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
10.2.4. ルートラベルを使用した Ingress コントローラーのシャード化の設定 リンクのコピーリンクがクリップボードにコピーされました!
ルートラベルを使用した Ingress コントローラーのシャード化とは、Ingress コントローラーがルートセレクターによって選択される任意 namespace の任意のルートを提供することを意味します。
Ingress コントローラーのシャード化は、一連の Ingress コントローラー間で着信トラフィックの負荷を分散し、トラフィックを特定の Ingress コントローラーに分離する際に役立ちます。たとえば、Company A のトラフィックをある Ingress コントローラーに指定し、Company B を別の Ingress コントローラーに指定できます。
手順
router-internal.yamlファイルを編集します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow Ingress コントローラーの
router-internal.yamlファイルを適用します。oc apply -f router-internal.yaml
# oc apply -f router-internal.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow Ingress コントローラーは、
type: shardedというラベルのある namespace のルートを選択します。
10.2.5. namespace ラベルを使用した Ingress コントローラーのシャード化の設定 リンクのコピーリンクがクリップボードにコピーされました!
namespace ラベルを使用した Ingress コントローラーのシャード化とは、Ingress コントローラーが namespace セレクターによって選択される任意の namespace の任意のルートを提供することを意味します。
Ingress コントローラーのシャード化は、一連の Ingress コントローラー間で着信トラフィックの負荷を分散し、トラフィックを特定の Ingress コントローラーに分離する際に役立ちます。たとえば、Company A のトラフィックをある Ingress コントローラーに指定し、Company B を別の Ingress コントローラーに指定できます。
手順
router-internal.yamlファイルを編集します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow Ingress コントローラーの
router-internal.yamlファイルを適用します。oc apply -f router-internal.yaml
# oc apply -f router-internal.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow Ingress コントローラーは、
type: shardedというラベルのある namespace セレクターによって選択される namespace のルートを選択します。
10.2.6. 追加リソース リンクのコピーリンクがクリップボードにコピーされました!
- Ingress Operator はワイルドカード DNS を管理します。詳細は、「OpenShift Container Platform の Ingress Operator 」、「Installing a cluster on bare metal」、および「Installing a cluster on vSphere」を参照してください。
10.3. ロードバランサーを使用した ingress クラスターの設定 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform は、クラスター内で実行されるサービスを使ってクラスター外からの通信を可能にする方法を提供します。この方法では、ロードバランサーを使用します。
10.3.1. ロードバランサーを使用したトラフィックのクラスターへの送信 リンクのコピーリンクがクリップボードにコピーされました!
特定の外部 IP アドレスを必要としない場合、ロードバランサーサービスを OpenShift Container Platform クラスターへの外部アクセスを許可するよう設定することができます。
ロードバランサーサービスは固有の IP を割り当てます。ロードバランサーには単一の edge ルーター IP があります (これは仮想 IP (VIP) の場合もありますが、初期の負荷分散では単一マシンになります。
プールが設定される場合、これはクラスター管理者によってではなく、インフラストラクチャーレベルで実行されます。
このセクションの手順では、クラスターの管理者が事前に行っておく必要のある前提条件があります。
前提条件
以下の手順を開始する前に、管理者は以下の条件を満たしていることを確認する必要があります。
- 要求がクラスターに到達できるように、クラスターネットワーク環境に対して外部ポートをセットアップします。
クラスター管理者ロールを持つユーザーが 1 名以上いることを確認します。このロールをユーザーに追加するには、以下のコマンドを実行します。
oc adm policy add-cluster-role-to-user cluster-admin username
oc adm policy add-cluster-role-to-user cluster-admin usernameCopy to Clipboard Copied! Toggle word wrap Toggle overflow - OpenShift Container Platform クラスターを、1 つ以上のマスターと 1 つ以上のノード、およびクラスターへのネットワークアクセスのあるクラスター外のシステムと共に用意します。この手順では、外部システムがクラスターと同じサブセットにあることを前提とします。別のサブセットの外部システムに必要な追加のネットワーク設定については、このトピックでは扱いません。
10.3.2. プロジェクトおよびサービスの作成 リンクのコピーリンクがクリップボードにコピーされました!
公開するプロジェクトおよびサービスが存在しない場合、最初にプロジェクトを作成し、次にサービスを作成します。
プロジェクトおよびサービスがすでに存在する場合は、サービスを公開してルートを作成する手順に進みます。
前提条件
-
クラスター管理者として
ocCLI をインストールし、ログインします。
手順
サービスの新規プロジェクトを作成します。
oc new-project <project_name>
$ oc new-project <project_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下は例になります。
oc new-project myproject
$ oc new-project myprojectCopy to Clipboard Copied! Toggle word wrap Toggle overflow oc new-appコマンドを使用してサービスを作成します。以下は例になります。oc new-app \ -e MYSQL_USER=admin \ -e MYSQL_PASSWORD=redhat \ -e MYSQL_DATABASE=mysqldb \ registry.redhat.io/rhscl/mysql-80-rhel7$ oc new-app \ -e MYSQL_USER=admin \ -e MYSQL_PASSWORD=redhat \ -e MYSQL_DATABASE=mysqldb \ registry.redhat.io/rhscl/mysql-80-rhel7Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを実行して新規サービスが作成されていることを確認します。
oc get svc -n myproject
$ oc get svc -n myproject NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE mysql-80-rhel7 ClusterIP 172.30.63.31 <none> 3306/TCP 4m55sCopy to Clipboard Copied! Toggle word wrap Toggle overflow デフォルトで、新規サービスには外部 IP アドレスがありません。
10.3.3. ルートの作成によるサービスの公開 リンクのコピーリンクがクリップボードにコピーされました!
oc expose コマンドを使用して、サービスをルートとして公開することができます。
手順
サービスを公開するには、以下を実行します。
- OpenShift Container Platform にログインします。
公開するサービスが置かれているプロジェクトにログインします。
oc project project1
$ oc project project1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを実行してルートを公開します。
oc expose service <service_name>
$ oc expose service <service_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下は例になります。
oc expose service mysql-80-rhel7
$ oc expose service mysql-80-rhel7 route "mysql-80-rhel7" exposedCopy to Clipboard Copied! Toggle word wrap Toggle overflow cURL などのツールを使用し、サービスのクラスター IP アドレスを使用してサービスに到達できることを確認します。
curl <pod_ip>:<port>
$ curl <pod_ip>:<port>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下は例になります。
curl 172.30.131.89:3306
$ curl 172.30.131.89:3306Copy to Clipboard Copied! Toggle word wrap Toggle overflow このセクションの例では、クライアントアプリケーションを必要とする MySQL サービスを使用しています。
Got packets out of orderのメッセージと共に文字ストリングを取得する場合は、このサービスに接続されていることになります。MySQL クライアントがある場合は、標準 CLI コマンドでログインします。
mysql -h 172.30.131.89 -u admin -p
$ mysql -h 172.30.131.89 -u admin -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. MySQL [(none)]>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
10.3.4. ロードバランサーサービスの作成 リンクのコピーリンクがクリップボードにコピーされました!
以下の手順を使用して、ロードバランサーサービスを作成します。
前提条件
- 公開するプロジェクトとサービスがあること。
手順
ロードバランサーサービスを作成するには、以下を実行します。
- OpenShift Container Platform にログインします。
公開するサービスが置かれているプロジェクトを読み込みます。
oc project project1
$ oc project project1Copy to Clipboard Copied! Toggle word wrap Toggle overflow マスターノードでテキストファイルを開き、以下のテキストを貼り付け、必要に応じてファイルを編集します。
ロードバランサー設定ファイルのサンプル
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - ファイルを保存し、終了します。
以下のコマンドを実行してサービスを作成します。
oc create -f <file-name>
oc create -f <file-name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下は例になります。
oc create -f mysql-lb.yaml
oc create -f mysql-lb.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを実行して新規サービスを表示します。
oc get svc
$ oc get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE egress-2 LoadBalancer 172.30.22.226 ad42f5d8b303045-487804948.example.com 3306:30357/TCP 15mCopy to Clipboard Copied! Toggle word wrap Toggle overflow 有効にされたクラウドプロバイダーがある場合、サービスには外部 IP アドレスが自動的に割り当てられます。
マスターで cURL などのツールを使用し、パブリック IP アドレスを使用してサービスに到達できることを確認します。
curl <public-ip>:<port>
$ curl <public-ip>:<port>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下は例になります。
curl 172.29.121.74:3306
$ curl 172.29.121.74:3306Copy to Clipboard Copied! Toggle word wrap Toggle overflow このセクションの例では、クライアントアプリケーションを必要とする MySQL サービスを使用しています。
Got packets out of orderのメッセージと共に文字ストリングを取得する場合は、このサービスに接続していることになります。MySQL クライアントがある場合は、標準 CLI コマンドでログインします。
mysql -h 172.30.131.89 -u admin -p
$ mysql -h 172.30.131.89 -u admin -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. MySQL [(none)]>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
10.4. サービスの外部 IP を使用した ingress クラスタートラフィックの設定 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform は、クラスター内で実行されるサービスを使ってクラスター外からの通信を可能にする方法を提供します。この方法は、サービスの外部 IP を使用します。
10.4.1. サービスの外部 IP を使用したトラフィックのクラスターへの送信 リンクのコピーリンクがクリップボードにコピーされました!
サービスを公開する 1 つの方法として、外部 IP アドレスをクラスター外からアクセス可能にするサービスに直接割り当てることができます。
使用する外部IPアドレスは、インフラストラクチャープラットフォームでプロビジョニングされ、クラスターノードに接続されている必要があります。
サービスに外部 IP を設定することにより、OpenShift Container Platform は、その IP アドレスに割り当てられるクラスターノードに到達するトラフィックが内部 Pod のいずれかに送信されることを許可する NAT ルールをセットアップします。これは内部サービス IP アドレスと似ていますが、外部 IP は OpenShift Container Platform に対し、このサービスが所定の IP で外部に公開される必要があることを示します。管理者は、この IP アドレスをクラスター内のノードのいずれかのホスト (ノード) インターフェースに割り当てる必要があります。または、このアドレスは仮想 IP (VIP) として使用することができます。
OpenShift Container Platform ではこれらの IP を管理しないため、管理者はトラフィックがこの IP を持つノードに到達することを確認する必要があります。
このセクションの手順では、クラスターの管理者が事前に行っておく必要のある前提条件があります。
前提条件
以下の手順を開始する前に、管理者は以下の条件を満たしていることを確認する必要があります。
- 要求がクラスターに到達できるように、クラスターネットワーク環境に対して外部ポートをセットアップします。
クラスター管理者ロールを持つユーザーが 1 名以上いることを確認します。このロールをユーザーに追加するには、以下のコマンドを実行します。
oc adm policy add-cluster-role-to-user cluster-admin username
oc adm policy add-cluster-role-to-user cluster-admin usernameCopy to Clipboard Copied! Toggle word wrap Toggle overflow - OpenShift Container Platform クラスターを、1 つ以上のマスターと 1 つ以上のノード、およびクラスターへのネットワークアクセスのあるクラスター外のシステムと共に用意します。この手順では、外部システムがクラスターと同じサブセットにあることを前提とします。別のサブセットの外部システムに必要な追加のネットワーク設定については、このトピックでは扱いません。
10.4.2. プロジェクトおよびサービスの作成 リンクのコピーリンクがクリップボードにコピーされました!
公開するプロジェクトおよびサービスが存在しない場合、最初にプロジェクトを作成し、次にサービスを作成します。
プロジェクトおよびサービスがすでに存在する場合は、サービスを公開してルートを作成する手順に進みます。
前提条件
-
クラスター管理者として
ocCLI をインストールし、ログインします。
手順
サービスの新規プロジェクトを作成します。
oc new-project <project_name>
$ oc new-project <project_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下は例になります。
oc new-project myproject
$ oc new-project myprojectCopy to Clipboard Copied! Toggle word wrap Toggle overflow oc new-appコマンドを使用してサービスを作成します。以下は例になります。oc new-app \ -e MYSQL_USER=admin \ -e MYSQL_PASSWORD=redhat \ -e MYSQL_DATABASE=mysqldb \ registry.redhat.io/rhscl/mysql-80-rhel7$ oc new-app \ -e MYSQL_USER=admin \ -e MYSQL_PASSWORD=redhat \ -e MYSQL_DATABASE=mysqldb \ registry.redhat.io/rhscl/mysql-80-rhel7Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを実行して新規サービスが作成されていることを確認します。
oc get svc -n myproject
$ oc get svc -n myproject NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE mysql-80-rhel7 ClusterIP 172.30.63.31 <none> 3306/TCP 4m55sCopy to Clipboard Copied! Toggle word wrap Toggle overflow デフォルトで、新規サービスには外部 IP アドレスがありません。
10.4.3. ルートの作成によるサービスの公開 リンクのコピーリンクがクリップボードにコピーされました!
oc expose コマンドを使用して、サービスをルートとして公開することができます。
手順
サービスを公開するには、以下を実行します。
- OpenShift Container Platform にログインします。
公開するサービスが置かれているプロジェクトにログインします。
oc project project1
$ oc project project1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを実行してルートを公開します。
oc expose service <service_name>
$ oc expose service <service_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下は例になります。
oc expose service mysql-80-rhel7
$ oc expose service mysql-80-rhel7 route "mysql-80-rhel7" exposedCopy to Clipboard Copied! Toggle word wrap Toggle overflow cURL などのツールを使用し、サービスのクラスター IP アドレスを使用してサービスに到達できることを確認します。
curl <pod_ip>:<port>
$ curl <pod_ip>:<port>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下は例になります。
curl 172.30.131.89:3306
$ curl 172.30.131.89:3306Copy to Clipboard Copied! Toggle word wrap Toggle overflow このセクションの例では、クライアントアプリケーションを必要とする MySQL サービスを使用しています。
Got packets out of orderのメッセージと共に文字ストリングを取得する場合は、このサービスに接続されていることになります。MySQL クライアントがある場合は、標準 CLI コマンドでログインします。
mysql -h 172.30.131.89 -u admin -p
$ mysql -h 172.30.131.89 -u admin -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. MySQL [(none)]>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
10.5. NodePort を使用した ingress クラスタートラフィックの設定 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform は、クラスター内で実行されるサービスを使ってクラスター外からの通信を可能にする方法を提供します。この方法は NodePort を使用します。
10.5.1. NodePort を使用したトラフィックのクラスターへの送信 リンクのコピーリンクがクリップボードにコピーされました!
NodePort-type Service リソースを使用して、クラスター内のすべてのノードの特定のポートでサービスを公開します。ポートは Service リソースの .spec.ports[*].nodePort フィールドで指定されます。
NodePort を使用するには、追加のポートリソースが必要です。
NodePort は、ノードの IP アドレスの静的ポートでサービスを公開します。NodePort はデフォルトで 30000 から 32767 の範囲に置かれます。つまり、 NodePort はサービスの意図されるポートに一致しないことが予想されます。たとえば、ポート 8080 はノードのポート 31020 として公開できます。
管理者は、外部 IP アドレスがノードにルーティングされることを確認する必要があります。
NodePort および外部 IP は独立しており、両方を同時に使用できます。
このセクションの手順では、クラスターの管理者が事前に行っておく必要のある前提条件があります。
前提条件
以下の手順を開始する前に、管理者は以下の条件を満たしていることを確認する必要があります。
- 要求がクラスターに到達できるように、クラスターネットワーク環境に対して外部ポートをセットアップします。
クラスター管理者ロールを持つユーザーが 1 名以上いることを確認します。このロールをユーザーに追加するには、以下のコマンドを実行します。
oc adm policy add-cluster-role-to-user cluster-admin <user_name>
$ oc adm policy add-cluster-role-to-user cluster-admin <user_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - OpenShift Container Platform クラスターを、1 つ以上のマスターと 1 つ以上のノード、およびクラスターへのネットワークアクセスのあるクラスター外のシステムと共に用意します。この手順では、外部システムがクラスターと同じサブセットにあることを前提とします。別のサブセットの外部システムに必要な追加のネットワーク設定については、このトピックでは扱いません。
10.5.2. プロジェクトおよびサービスの作成 リンクのコピーリンクがクリップボードにコピーされました!
公開するプロジェクトおよびサービスが存在しない場合、最初にプロジェクトを作成し、次にサービスを作成します。
プロジェクトおよびサービスがすでに存在する場合は、サービスを公開してルートを作成する手順に進みます。
前提条件
-
クラスター管理者として
ocCLI をインストールし、ログインします。
手順
サービスの新規プロジェクトを作成します。
oc new-project <project_name>
$ oc new-project <project_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下は例になります。
oc new-project myproject
$ oc new-project myprojectCopy to Clipboard Copied! Toggle word wrap Toggle overflow oc new-appコマンドを使用してサービスを作成します。以下は例になります。oc new-app \ -e MYSQL_USER=admin \ -e MYSQL_PASSWORD=redhat \ -e MYSQL_DATABASE=mysqldb \ registry.redhat.io/rhscl/mysql-80-rhel7$ oc new-app \ -e MYSQL_USER=admin \ -e MYSQL_PASSWORD=redhat \ -e MYSQL_DATABASE=mysqldb \ registry.redhat.io/rhscl/mysql-80-rhel7Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを実行して新規サービスが作成されていることを確認します。
oc get svc -n myproject
$ oc get svc -n myproject NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE mysql-80-rhel7 ClusterIP 172.30.63.31 <none> 3306/TCP 4m55sCopy to Clipboard Copied! Toggle word wrap Toggle overflow デフォルトで、新規サービスには外部 IP アドレスがありません。
10.5.3. ルートの作成によるサービスの公開 リンクのコピーリンクがクリップボードにコピーされました!
oc expose コマンドを使用して、サービスをルートとして公開することができます。
手順
サービスを公開するには、以下を実行します。
- OpenShift Container Platform にログインします。
公開するサービスが置かれているプロジェクトにログインします。
oc project project1
$ oc project project1Copy to Clipboard Copied! Toggle word wrap Toggle overflow アプリケーションのノードポートを公開するには、以下のコマンドを入力します。OpenShift Container Platform は
30000-32767範囲の利用可能なポートを自動的に選択します。oc expose dc mysql-80-rhel7 --type=NodePort --name=mysql-ingress
$ oc expose dc mysql-80-rhel7 --type=NodePort --name=mysql-ingressCopy to Clipboard Copied! Toggle word wrap Toggle overflow オプション: サービスが公開されるノードポートで利用可能なことを確認するには、以下のコマンドを入力します。
oc get svc -n myproject
$ oc get svc -n myproject NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE mysql-80-rhel7 ClusterIP 172.30.217.127 <none> 3306/TCP 9m44s mysql-ingress NodePort 172.30.107.72 <none> 3306:31345/TCP 39sCopy to Clipboard Copied! Toggle word wrap Toggle overflow オプション:
oc new-appコマンドによって自動的に作成されたサービスを削除するには、以下のコマンドを入力します。oc delete svc mysql-80-rhel7
$ oc delete svc mysql-80-rhel7Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第11章 クラスター全体のプロキシーの設定 リンクのコピーリンクがクリップボードにコピーされました!
実稼働環境では、インターネットへの直接アクセスを拒否し、代わりに HTTP または HTTPS プロキシーを使用することができます。既存クラスターのプロキシーオブジェクトを変更するか、または新規クラスターの install-config.yaml ファイルでプロキシー設定を行うことにより、OpenShift Container Platform をプロキシーを使用するように設定できます。
クラスター全体のプロキシーは、サポートされるプロバイダーについてユーザーによってプロビジョニングされるインフラストラクチャーのインストールを使用している場合にのみサポートされます。
前提条件
クラスターがアクセスする必要のあるサイトを確認し、プロキシーをバイパスする必要があるかどうかを判断します。デフォルトで、すべてのクラスター egress トラフィック(クラスターをホストするクラウドのクラウドプロバイダー API に対する呼び出しを含む)はプロキシーされます。プロキシーオブジェクトの
spec.noProxyフィールドにサイトを追加し、必要に応じてプロキシーをバイパスします。注記プロキシーオブジェクトの
status.noProxyフィールドは、デフォルトでインスタンスメタデータエンドポイント (169.254.169.254) およびインストール設定のnetworking.machineCIDR、networking.clusterNetwork.cidr、およびnetworking.serviceNetworkフィールドの値で設定されます。
11.1. クラスター全体のプロキシーの有効化 リンクのコピーリンクがクリップボードにコピーされました!
プロキシーオブジェクトは、クラスター全体の egress プロキシーを管理するために使用されます。プロキシーを設定せずにクラスターがインストールまたはアップグレードされると、プロキシーオブジェクトは引き続き生成されますが、spec は設定されません。以下は例になります。
クラスター管理者は、この cluster プロキシーオブジェクトを変更して OpenShift Container Platform のプロキシーを設定できます。
cluster という名前のプロキシーオブジェクトのみがサポートされ、追加のプロキシーは作成できません。
前提条件
- クラスター管理者のパーミッション
-
OpenShift Container Platform
ocCLI ツールがインストールされている
手順
HTTPS 接続のプロキシーに必要な追加の CA 証明書が含まれる ConfigMap を作成します。
注記プロキシーのアイデンティティー証明書が RHCOS 信頼バンドルからの認証局によって署名される場合は、これを省略できます。
以下の内容で
user-ca-bundle.yamlというファイルを作成して、PEM でエンコードされた証明書の値を指定します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow このファイルから ConfigMap を作成します。
oc create -f user-ca-bundle.yaml
$ oc create -f user-ca-bundle.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
oc editコマンドを使用してプロキシーオブジェクトを変更します。oc edit proxy/cluster
$ oc edit proxy/clusterCopy to Clipboard Copied! Toggle word wrap Toggle overflow プロキシーに必要なフィールドを設定します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- クラスター外の HTTP 接続を作成するために使用するプロキシー URL。URL スキームは
httpである必要があります。 - 2
- クラスター外で HTTPS 接続を作成するために使用するプロキシー URL。これが指定されていない場合、HTTP および HTTPS 接続の両方に
httpProxyが使用されます。URL スキームはhttpである必要があります。httpsは現在サポートされていません。 - 3
- プロキシーを除外するための宛先ドメイン名、ドメイン、IP アドレス、または他のネットワーク CIDR のカンマ区切りの一覧。ドメインのすべてのサブドメインを組み込むために、ドメインの前に
.を入力します。*を使用し、すべての宛先のプロキシーをバイパスします。networking.machineCIDRに含まれていないワーカーをスケールアップする場合、 それらをこの一覧に追加し、接続の問題を防ぐ必要があります。 - 4
httpProxyおよびhttpsProxyの値をステータスに書き込む前の readiness チェックに使用するクラスター外の 1 つ以上の URL。- 5
- HTTPS 接続のプロキシーに必要な追加の CA 証明書が含まれる、
openshift-confignamespace の ConfigMap の参照。ここで参照する前に ConfigMap が存在している必要があります。このフィールドは、プロキシーのアイデンティティー証明書が RHCOS 信頼バンドルからの認証局によって署名されない限り必要になります。
- 変更を適用するためにファイルを保存します。
11.2. クラスター全体のプロキシーの削除 リンクのコピーリンクがクリップボードにコピーされました!
cluster プロキシーオブジェクトは削除できません。クラスターからプロキシーを削除するには、プロキシーオブジェクトからすべての spec フィールドを削除します。
前提条件
- クラスター管理者のパーミッション
-
OpenShift Container Platform
ocCLI ツールがインストールされている
手順
oc editコマンドを使用してプロキシーを変更します。oc edit proxy/cluster
$ oc edit proxy/clusterCopy to Clipboard Copied! Toggle word wrap Toggle overflow プロキシーオブジェクトからすべての
specフィールドを削除します。以下は例になります。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 変更を適用するためにファイルを保存します。
第12章 カスタム PKI の設定 リンクのコピーリンクがクリップボードにコピーされました!
Web コンソールなどの一部のプラットフォームコンポーネントは、通信にルートを使用し、それらと対話するために他のコンポーネントの証明書を信頼する必要があります。カスタムのパブリックキーインフラストラクチャー (PKI) を使用している場合は、プライベートに署名された CA 証明書がクラスター全体で認識されるようにこれを設定する必要があります。
プロキシー API を使用して、クラスター全体で信頼される CA 証明書を追加できます。インストール時またはランタイム時にこれを実行する必要があります。
プロキシー API を使用してクラスター全体で信頼される CA 証明書を追加する方法は、OpenShift Container Platform 4.2.23 以降でサポートされています。
インストール 時に、クラスター全体のプロキシーを設定します。プライベートに署名された CA 証明書は、
install-config.yamlファイルのadditionalTrustBundle設定で定義する必要があります。インストールプログラムは、定義した追加の CA 証明書が含まれる
user-ca-bundleという名前の ConfigMap を生成します。次に、Cluster Network Operator は 3 つのコンテンツを Red Hat Enterprise Linux CoreOS (RHCOS) 信頼バンドルにマージするtrusted-ca-bundleConfigMap を作成し、この ConfigMap はプロキシーオブジェクトの trustedCA フィールドで参照されます。-
ランタイム 時に、デフォルトのプロキシーオブジェクトを変更して、プライベートに署名された CA 証明書を追加 します (これは、クラスターのプロキシー有効化のワークフローの一部です)。これには、クラスターで信頼される必要があるプライベートに署名された CA 証明書が含まれる ConfigMap を作成し、次にプライベートに署名された証明書の ConfigMap を参照する
trustedCAでプロキシーリソースを変更することが関係します。
インストーラー設定の additionalTrustBundle フィールドおよびプロキシーリソースの trustedCA フィールドは、クラスター全体の信頼バンドルを管理するために使用されます。 additionalTrustBundle はインストール時に使用され、プロキシーの trustedCA がランタイム時に使用されます。
trustedCA フィールドは、クラスターコンポーネントによって使用されるカスタム証明書とキーのペアを含む ConfigMap の参照です。
12.1. インストール時のクラスター全体のプロキシーの設定 リンクのコピーリンクがクリップボードにコピーされました!
実稼働環境では、インターネットへの直接アクセスを拒否し、代わりに HTTP または HTTPS プロキシーを使用することができます。プロキシー設定を install-config.yaml ファイルで行うことにより、新規の OpenShift Container Platform クラスターをプロキシーを使用するように設定できます。
前提条件
-
既存の
install-config.yamlファイル。 クラスターがアクセスする必要のあるサイトを確認し、プロキシーをバイパスする必要があるかどうかを判別する。デフォルトで、すべてのクラスター egress トラフィック (クラスターをホストするクラウドについてのクラウドプロバイダー API に対する呼び出しを含む) はプロキシーされます。プロキシーオブジェクトの
spec.noProxyフィールドにサイトを追加し、必要に応じてプロキシーをバイパスします。注記プロキシーオブジェクトの
status.noProxyフィールドは、デフォルトでインスタンスメタデータエンドポイント (169.254.169.254) およびインストール設定のnetworking.machineCIDR、networking.clusterNetwork.cidr、およびnetworking.serviceNetworkフィールドの値で設定されます。
手順
install-config.yamlファイルを編集し、プロキシー設定を追加します。以下は例になります。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- クラスター外の HTTP 接続を作成するために使用するプロキシー URL。URL スキームは
httpである必要があります。 - 2
- クラスター外で HTTPS 接続を作成するために使用するプロキシー URL。このフィールドが指定されていない場合、HTTP および HTTPS 接続の両方に
httpProxyが使用されます。URL スキームはhttpである必要があります。httpsは現在サポートされていません。 - 3
- プロキシーを除外するための宛先ドメイン名、ドメイン、IP アドレス、または他のネットワーク CIDR のカンマ区切りの一覧。ドメインのすべてのサブドメインを組み込むために、ドメインの前に
.を入力します。*を使用し、すべての宛先のプロキシーをバイパスします。 - 4
- 指定されている場合、インストールプログラムは HTTPS 接続のプロキシーに必要な 1 つ以上の追加の CA 証明書が含まれる
user-ca-bundleという名前の ConfigMap をopenshift-confignamespace に生成します。次に、Cluster Network Operator は 3 つのコンテンツを Red Hat Enterprise Linux CoreOS (RHCOS) 信頼バンドルにマージするtrusted-ca-bundleConfigMap を作成し、この ConfigMap はプロキシーオブジェクトのtrustedCAフィールドで参照されます。additionalTrustBundleフィールドは、プロキシーのアイデンティティー証明書が RHCOS 信頼バンドルからの認証局によって署名されない限り必要になります。
注記インストールプログラムは、プロキシーの
readinessEndpointsフィールドをサポートしません。- ファイルを保存し、OpenShift Container Platform のインストール時にこれを参照します。
インストールプログラムは、指定の install-config.yaml ファイルのプロキシー設定を使用する cluster という名前のクラスター全体のプロキシーを作成します。プロキシー設定が指定されていない場合、 cluster のプロキシーオブジェクトが依然として作成されますが、これには spec がありません。
cluster という名前のプロキシーオブジェクトのみがサポートされ、追加のプロキシーは作成できません。
12.2. クラスター全体のプロキシーの有効化 リンクのコピーリンクがクリップボードにコピーされました!
プロキシーオブジェクトは、クラスター全体の egress プロキシーを管理するために使用されます。プロキシーを設定せずにクラスターがインストールまたはアップグレードされると、プロキシーオブジェクトは引き続き生成されますが、spec は設定されません。以下は例になります。
クラスター管理者は、この cluster プロキシーオブジェクトを変更して OpenShift Container Platform のプロキシーを設定できます。
cluster という名前のプロキシーオブジェクトのみがサポートされ、追加のプロキシーは作成できません。
前提条件
- クラスター管理者のパーミッション
-
OpenShift Container Platform
ocCLI ツールがインストールされている
手順
HTTPS 接続のプロキシーに必要な追加の CA 証明書が含まれる ConfigMap を作成します。
注記プロキシーのアイデンティティー証明書が RHCOS 信頼バンドルからの認証局によって署名される場合は、これを省略できます。
以下の内容で
user-ca-bundle.yamlというファイルを作成して、PEM でエンコードされた証明書の値を指定します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow このファイルから ConfigMap を作成します。
oc create -f user-ca-bundle.yaml
$ oc create -f user-ca-bundle.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
oc editコマンドを使用してプロキシーオブジェクトを変更します。oc edit proxy/cluster
$ oc edit proxy/clusterCopy to Clipboard Copied! Toggle word wrap Toggle overflow プロキシーに必要なフィールドを設定します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- クラスター外の HTTP 接続を作成するために使用するプロキシー URL。URL スキームは
httpである必要があります。 - 2
- クラスター外で HTTPS 接続を作成するために使用するプロキシー URL。これが指定されていない場合、HTTP および HTTPS 接続の両方に
httpProxyが使用されます。URL スキームはhttpである必要があります。httpsは現在サポートされていません。 - 3
- プロキシーを除外するための宛先ドメイン名、ドメイン、IP アドレス、または他のネットワーク CIDR のカンマ区切りの一覧。ドメインのすべてのサブドメインを組み込むために、ドメインの前に
.を入力します。*を使用し、すべての宛先のプロキシーをバイパスします。networking.machineCIDRに含まれていないワーカーをスケールアップする場合、 それらをこの一覧に追加し、接続の問題を防ぐ必要があります。 - 4
httpProxyおよびhttpsProxyの値をステータスに書き込む前の readiness チェックに使用するクラスター外の 1 つ以上の URL。- 5
- HTTPS 接続のプロキシーに必要な追加の CA 証明書が含まれる、
openshift-confignamespace の ConfigMap の参照。ここで参照する前に ConfigMap が存在している必要があります。このフィールドは、プロキシーのアイデンティティー証明書が RHCOS 信頼バンドルからの認証局によって署名されない限り必要になります。
- 変更を適用するためにファイルを保存します。
12.3. Operator を使用した証明書の挿入 リンクのコピーリンクがクリップボードにコピーされました!
カスタム CA 証明書が ConfigMap 経由でクラスターに追加されると、Cluster Network Operator はユーザーによってプロビジョニングされる CA 証明書およびシステム CA 証明書を単一バンドルにマージし、信頼バンドルの挿入を要求する Operator にマージされたバンドルを挿入します。
Operator は、以下のラベルの付いた空の ConfigMap を作成してこの挿入を要求します。
config.openshift.io/inject-trusted-cabundle="true"
config.openshift.io/inject-trusted-cabundle="true"
Operator は、この ConfigMap をコンテナーのローカル信頼ストアにマウントします。
信頼された CA 証明書の追加は、証明書が Red Hat Enterprise Linux CoreOS (RHCOS) 信頼バンドルに含まれない場合にのみ必要になります。
証明書の挿入は Operator に制限されません。Cluster Network Operator は、空の ConfigMap が config.openshift.io/inject-trusted-cabundle=true ラベルを使用して作成される場合に、すべての namespace で証明書を挿入できます。
ConfigMap はすべての namespace に置くことができますが、ConfigMap はカスタム CA を必要とする Pod 内の各コンテナーに対してボリュームとしてマウントされる必要があります。以下は例になります。
Legal Notice
リンクのコピーリンクがクリップボードにコピーされました!
Copyright © 2025 Red Hat
OpenShift documentation is licensed under the Apache License 2.0 (https://www.apache.org/licenses/LICENSE-2.0).
Modified versions must remove all Red Hat trademarks.
Portions adapted from https://github.com/kubernetes-incubator/service-catalog/ with modifications by Red Hat.
Red Hat, Red Hat Enterprise Linux, the Red Hat logo, the Shadowman logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat Software Collections is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation’s permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.