8.7. クラスタリング
8.7.1. JGroups 検索メカニズムの設定
OpenShift で JBoss EAP クラスターリングを有効にするには、JBoss EAP 設定の JGroups プロトコルスタックを設定し、kubernetes.KUBE_PING
または dns.DNS_PING
検索メカニズムのいずれかを使用するようにします。
カスタムの standalone-openshift.xml
設定ファイルを使用することもできますが、環境変数を使用 してイメージビルドで JGroups を設定することが推奨されます。
以下の手順は、環境変数を使用して JBoss EAP for OpenShift イメージの検出メカニズムを設定します。
利用可能なアプリケーションテンプレートの 1 つを使用して、JBoss EAP for OpenShift イメージの上にアプリケーションをデプロイする場合、デフォルトの検索メカニズムは dns.DNS_PING
になります。
dns.DNS_PING
および kubernetes.KUBE_PING
検索メカニズムは互換性がありません。検索に dns.DNS_PING
メカニズムを使用する 1 つの独立した子クラスターと、kubernetes.KUBE_PING
メカニズムを使用するもう 1 つの独立した子クラスターを使用して、スーパークラスターを設定することは不可能です。同様に、ローリングアップグレードを実行する場合は、ソースクラスターとターゲットクラスターの両方で同じ検索メカニズムを使用する必要があります。
8.7.1.1. KUBE_PING の設定
KUBE_PING
JGroups 検索メカニズムを使用するには、以下を行います。
KUBE_PING
を検索メカニズムとして使用するよう JGroups プロトコルスタックを設定する必要があります。これには、
JGROUPS_PING_PROTOCOL
環境変数をkubernetes.KUBE_PING
に設定します。JGROUPS_PING_PROTOCOL=kubernetes.KUBE_PING
KUBERNETES_NAMESPACE
環境変数を OpenShift プロジェクト名に設定する必要があります。設定がないと、サーバーは単一ノードのクラスター (1 つのクラスター) として動作します。以下に例を示します。KUBERNETES_NAMESPACE=PROJECT_NAME
KUBERNETES_LABELS
環境変数を設定する必要があります。これは サービスレベルで設定したラベル と一致する必要があります。設定がないと、アプリケーション外部の Pod (namespace にあっても) は参加を試みます。以下に例を示します。KUBERNETES_LABELS=application=APP_NAME
Pod が実行しているサービスアカウントを承認し、Kubernetes の REST API アカウントへのアクセスを許可する必要があります。これは OpenShift CLI を使用して行われます。以下は、現在のプロジェクトの名前空間で
default
サービスアカウントを使用した例になります。oc policy add-role-to-user view system:serviceaccount:$(oc project -q):default -n $(oc project -q)
プロジェクトの namespace で
eap-service-account
を使用した例は次のとおりです。oc policy add-role-to-user view system:serviceaccount:$(oc project -q):eap-service-account -n $(oc project -q)
注記サービスアカウントへのポリシーの追加に関する詳細は、アプリケーションのデプロイメントに向けた OpenShift の準備 を参照してください。
8.7.1.2. DNS_PING の設定
DNS_PING
JGroups 検索メカニズムを使用するには、以下を行います。
DNS_PING
を検索メカニズムとして使用するよう JGroups プロトコルスタックを設定する必要があります。これには、
JGROUPS_PING_PROTOCOL
環境変数をdns.DNS_PING
に設定します。JGROUPS_PING_PROTOCOL=dns.DNS_PING
OPENSHIFT_DNS_PING_SERVICE_NAME
環境変数を、クラスターの ping サービスの名前に設定する必要があります。OPENSHIFT_DNS_PING_SERVICE_NAME=PING_SERVICE_NAME
OPENSHIFT_DNS_PING_SERVICE_PORT
環境変数を、ping サービスが公開されるポート番号に設定する必要があります。DNS_PING
プロトコルは SRV レコードからポートを識別しようとします。 識別できない場合はデフォルトの8888
になります。OPENSHIFT_DNS_PING_SERVICE_PORT=PING_PORT
ping ポートを公開する ping サービスを定義する必要があります。このサービスはヘッドレスである必要があり (ClusterIP=None)、以下が必要になります。
- ポートに名前を付ける必要があります。
このサービスは、
service.alpha.kubernetes.io/tolerate-unready-endpoints
およびpublishNotReadyAddresses
プロパティー の両方でtrue
に設定されたアノテーションを付ける必要があります。注記-
service.alpha.kubernetes.io/tolerate-unready-endpoints
プロパティーおよびpublishNotReadyAddresses
プロパティーの両方を使用して、ping サービスが古い OpenShift リリースとそれ以降の OpenShift リリースの両方で機能するようにします。 - これらのアノテーションを省略すると、各ノードは起動時に独自のクラスターを形成します。各ノードは、起動後に他のノードが検出されないため、そのクラスターを起動後に他のノードのクラスターにマージします。
kind: Service apiVersion: v1 spec: publishNotReadyAddresses: true clusterIP: None ports: - name: ping port: 8888 selector: deploymentConfig: eap-app metadata: name: eap-app-ping annotations: service.alpha.kubernetes.io/tolerate-unready-endpoints: "true" description: "The JGroups ping port for clustering."
-
DNS_PING
はサービスアカウントへの変更が必要なく、デフォルトのパーミッションを使用して動作します。
8.7.2. クラスタートラフィックを暗号化するため JGroups を設定
OpenShift で JBoss EAP のクラスタートラフィックを暗号化するには、SYM_ENCRYPT
または ASYM_ENCRYPT
プロトコルのいずれかを使用するよう、JBoss EAP 設定の JGroups プロトコルスタックを設定する必要があります。
カスタムの standalone-openshift.xml
設定ファイルを使用することもできますが、環境変数を使用 してイメージビルドで JGroups を設定することが推奨されます。
以下の手順は、環境変数を使用して、JBoss EAP for OpenShift イメージのクラスタートラフィックの暗号化にプロトコルを設定します。
SYM_ENCRYPT
および ASYM_ENCRYPT
プロトコルは互換性がありません。クラスタートラフィックの暗号化に SYM_ENCRYPT
を使用する 1 つの独立した子クラスターと、ASYM_ENCRYPT
プロトコルを使用する別の独立した子クラスターの 2 つを使用してスーパークラスターを設定するのは不可能です。同様に、ローリングアップグレードを実行する場合は、ソースおよびターゲットクラスターの両方で同じプロトコルを使用する必要があります。
8.7.2.1. SYM_ENCRYPT の設定
SYM_ENCRYPT
プロトコルを使用して JGroups クラスタートラフィックを暗号化するには、以下を行います。
SYM_ENCRYPT
を暗号化プロトコルをして使用するよう、JGroups プロトコルスタックを設定する必要があります。これには、
JGROUPS_ENCRYPT_PROTOCOL
環境変数をSYM_ENCRYPT
に設定します。JGROUPS_ENCRYPT_PROTOCOL=SYM_ENCRYPT
JGROUPS_ENCRYPT_SECRET
環境変数を、JGroups の通信をセキュアにするために使用される JGroups キーストアファイルが含まれるシークレットの名前に設定する必要があります。設定しないと、クラスター通信は暗号化されず、警告が発生します。以下に例を示します。JGROUPS_ENCRYPT_SECRET=eap7-app-secret
JGROUPS_ENCRYPT_KEYSTORE_DIR
環境変数を、JGROUPS_ENCRYPT_SECRET
変数を介して指定されるシークレット内にあるキーストアファイルのディレクトリーパスに設定する必要があります。設定しないと、クラスター通信は暗号化されず、警告が発生します。以下に例を示します。JGROUPS_ENCRYPT_KEYSTORE_DIR=/etc/jgroups-encrypt-secret-volume
JGROUPS_ENCRYPT_KEYSTORE
環境変数を、JGROUPS_ENCRYPT_SECRET
変数を介して指定されるシークレット内にあるキーストアファイルの名前に設定する必要があります。設定しないと、クラスター通信は暗号化されず、警告が発生します。以下に例を示します。JGROUPS_ENCRYPT_KEYSTORE=jgroups.jceks
JGROUPS_ENCRYPT_NAME
環境変数を、サーバーの証明書に関連する名前に設定する必要があります。設定しないと、クラスター通信は暗号化されず、警告が発生します。以下に例を示します。JGROUPS_ENCRYPT_NAME=jgroups
JGROUPS_ENCRYPT_PASSWORD
環境変数を、キーストアおよび証明書にアクセスするために使用されるパスワードに設定する必要があります。設定しないと、クラスター通信は暗号化されず、警告が発生します。以下に例を示します。JGROUPS_ENCRYPT_PASSWORD=mypassword
8.7.2.2. ASYM_ENCRYPT の設定
JBoss EAP 7.3 には ASYM_ENCRYPT
プロトコルの新しいバージョンが含まれています。以前のバージョンのプロトコルは非推奨になりました。JGROUPS_CLUSTER_PASSWORD
環境変数を指定する場合は、プロトコルの非推奨バージョンが使用され、警告が Pod ログに出力されます。
ASYM_ENCRYPT
プロトコルを使用して JGroups クラスタートラフィックを暗号化するには、ASYM_ENCRYPT
を暗号化プロトコルとして指定します。また、elytron
サブシステムに設定されたキーストアを使用するよう設定します。
-e JGROUPS_ENCRYPT_PROTOCOL="ASYM_ENCRYPT" \ -e JGROUPS_ENCRYPT_SECRET="encrypt_secret" \ -e JGROUPS_ENCRYPT_NAME="encrypt_name" \ -e JGROUPS_ENCRYPT_PASSWORD="encrypt_password" \ -e JGROUPS_ENCRYPT_KEYSTORE="encrypt_keystore" \ -e JGROUPS_CLUSTER_PASSWORD="cluster_password"