SSL セットアップ

このページは異なるflinkコンポーネント間のネットワーク通信のためにSSLを有効にする方法についての説明を提供します。

SSL 設定

SSLはflinkコンポーネント間の全てのネットワーク通信のために有効にすることができます。SSL キーストアとトラストストアはsecurity.ssl.* 名前空間内のキーを使って各flinkノード上に配備され設定(conf/flink-conf.yaml)される必要があります (詳細はconfiguration page を見てください)。SSLは以下のフラグを使って異なる転送について選択的に有効/無効にすることができます。これらのフラグはsecurity.ssl.enabled がtrueに設定された時のみ適用することができます。

  • taskmanager.data.ssl.enabled: タスクマネージャー間のデータ通信のためのSSLフラグ
  • blob.service.ssl.enabled: クライアント/サーバ通信のblogサービスのためのSSLフラグ
  • akka.ssl.enabled: flinkクライアント、ジョブマネージャおよびタスクマネージャ間のakkaベースの制御接続のためのSSLフラグ
  • jobmanager.web.ssl.enabled: ジョブマネージャのwebフロントエンドへのhttpsアクセスを有効にするフラグ

キーストアとトラストストアの配備

Javaキーストアを生成し、flinkクラスタ内の各ノードへコピーする必要があります。証明書内のコモンネームあるいはサブジェクトの別名はノードのホスト名とIPアドレスに一致する必要があります。キーストアとトラストストアはキーツール ユーティリティ(https://docs.oracle.com/javase/8/docs/technotes/tools/unix/keytool.html)を使って生成することができます。全てのflinkコンポーネントはキーストアとトラストストア ファイルへの読み込みアクセスを持つ必要があります。

例: 2つのノードクラスタのための自己署名CAとキーストアの生成

自己署名のCAを持つトラストストアを生成するために以下のキーツールのコマンドを実行します

keytool -genkeypair -alias ca -keystore ca.keystore -dname "CN=Sample CA" -storepass password -keypass password -keyalg RSA -ext bc=ca:true
keytool -keystore ca.keystore -storepass password -alias ca -exportcert > ca.cer
keytool -importcert -keystore ca.truststore -alias ca -storepass password -noprompt -file ca.cer

これで、上のCAによって署名された証明書を持つ各ノードのためのキーストアを作成します。node1.company.org および node2.company.org がそれぞれ192.168.1.1 および 192.168.1.2 のIPを持つホスト名にします

ノード 1

keytool -genkeypair -alias node1 -keystore node1.keystore -dname "CN=node1.company.org" -ext SAN=dns:node1.company.org,ip:192.168.1.1 -storepass password -keypass password -keyalg RSA
keytool -certreq -keystore node1.keystore -storepass password -alias node1 -file node1.csr
keytool -gencert -keystore ca.keystore -storepass password -alias ca -ext SAN=dns:node1.company.org,ip:192.168.1.1 -infile node1.csr -outfile node1.cer
keytool -importcert -keystore node1.keystore -storepass password -file ca.cer -alias ca -noprompt
keytool -importcert -keystore node1.keystore -storepass password -file node1.cer -alias node1 -noprompt

ノード 2

keytool -genkeypair -alias node2 -keystore node2.keystore -dname "CN=node2.company.org" -ext SAN=dns:node2.company.org,ip:192.168.1.2 -storepass password -keypass password -keyalg RSA
keytool -certreq -keystore node2.keystore -storepass password -alias node2 -file node2.csr
keytool -gencert -keystore ca.keystore -storepass password -alias ca -ext SAN=dns:node2.company.org,ip:192.168.1.2 -infile node2.csr -outfile node2.cer
keytool -importcert -keystore node2.keystore -storepass password -file ca.cer -alias ca -noprompt
keytool -importcert -keystore node2.keystore -storepass password -file node2.cer -alias node2 -noprompt

スタンドアローン配備

スタンドアローンクラスア内の各ノードをローカルファイルシステム内に存在するキーストアおよびトラストストアファイルを取り上げるように設定します。

例: 2 ノードのクラスタ

  • 2つのキーストア、各ノードごとに1つを生成し、それらをそれぞれのノード上のファイルシステムにコピーします。また、CAのpublicキー(キーストア内の証明書を署名するために使われた)を両方のノード上のJavaトラストストアとしてコピーします
  • それらのファイルを取り上げるように conf/flink-conf.yaml を設定します

ノード 1

security.ssl.enabled: true
security.ssl.keystore: /usr/local/node1.keystore
security.ssl.keystore-password: abc123
security.ssl.key-password: abc123
security.ssl.truststore: /usr/local/ca.truststore
security.ssl.truststore-password: abc123

ノード 2

security.ssl.enabled: true
security.ssl.keystore: /usr/local/node2.keystore
security.ssl.keystore-password: abc123
security.ssl.key-password: abc123
security.ssl.truststore: /usr/local/ca.truststore
security.ssl.truststore-password: abc123
  • flinkの内部的な通信の全てについてSSLが有効になるようにflinkのコンポーネントを再起動します
  • https urlを使ってジョブマネージャーのUIにアクセスすることで検証します。UI内のタスクマネージャのパスはプロトコルとして akka.ssl.tcp:// に見えなければなりません
  • blobサーバおよびタスクマネージャのデータ通信はlogファイルによって検証することができます

YARN の配備

キーストアとトラストストアはクラスタのセットアップに依存してYARNセットアップ内で複数の方法で配備できなければなりません。以下は、これを行う2つの方法です

1. YARNセッションを開始する前にキーストアを配備する

キーストアとトラストストアはflinkコンポーネントが潜在的に実行されるYARNセットアップ内の全てのノード上で生成され配備されなければなりません。flink YARNクライアントからの同じflink設定ファイルはYARNクラスタが実行中の全てのflinkコンポーネントによって使われます。従って全てのYARNノード内で同じファイルパスを使ってキーストアが配備されアクセス可能である必要があります。

設定の例

security.ssl.enabled: true
security.ssl.keystore: /usr/local/node.keystore
security.ssl.keystore-password: abc123
security.ssl.key-password: abc123
security.ssl.truststore: /usr/local/ca.truststore
security.ssl.truststore-password: abc123

これで通常行うようにCLIからYARN切歯音を開始することができます。

2. キーストアおよびトラストストアを配備するためにYARN cliを使います

キーストアおよびトラストストアを配布するためにYARNクライアントのファイル発送オプション (-yt) を使うことができます。同じキーストアが全てのノード上で配備されるため、全てのノードについてキーストア内の1つの証明書が提供されるようにする必要があります。これは、証明書内の Subject Alternative Name(SAN) 拡張を使いそれをクラスタ内の全てのノード上(ホスト名とipアドレス)でカバーするように設定するか、ワイルドカードのドメイン名(もしクラスタのセットアップがそれ相応にされている場合)のどちらかを使うことで、行うことができます。

  • キーストアを生成する時に、以下のパラメータをキーツールコマンドに提供する: -ext SAN=dns:node1.company.org,ip:192.168.1.1,dns:node2.company.org,ip:192.168.1.2
  • キーストアとCAのトラストストアをローカルディレクトリ(cliの作業ディレクトリ)にコピーします。つまり deploy-keys/
  • 相対パスからファイルを取り上げるように設定を更新します
security.ssl.enabled: true
security.ssl.keystore: deploy-keys/node.keystore
security.ssl.keystore-password: password
security.ssl.key-password: password
security.ssl.truststore: deploy-keys/ca.truststore
security.ssl.truststore-password: password
  • -yt パラメータを使ってYARNセッションを開始します
flink run -m yarn-cluster -yt deploy-keys/ TestJob.jar

YARNを使って配備する場合、flinkのwebダッシュボードはYARNプロキシのトラッキングURLを使ってアクセス可能ですYARNのプロキシがflinkのhttps urlにアクセス可能にするために、YARNプロキシがflinkのSSL証明書を受け付けるようにする必要があります。独自のCA証明書をYARNプロキシノード上のJavaのデフォルトのトラストストアに追加します。

TOP
inserted by FC2 system