このページは異なるflinkコンポーネント間のネットワーク通信のためにSSLを有効にする方法についての説明を提供します。
SSLはflinkコンポーネント間の全てのネットワーク通信のために有効にすることができます。SSL キーストアとトラストストアはsecurity.ssl.* 名前空間内のキーを使って各flinkノード上に配備され設定(conf/flink-conf.yaml)される必要があります (詳細はconfiguration page を見てください)。SSLは以下のフラグを使って異なる転送について選択的に有効/無効にすることができます。これらのフラグはsecurity.ssl.enabled がtrueに設定された時のみ適用することができます。
Javaキーストアを生成し、flinkクラスタ内の各ノードへコピーする必要があります。証明書内のコモンネームあるいはサブジェクトの別名はノードのホスト名とIPアドレスに一致する必要があります。キーストアとトラストストアはキーツール ユーティリティ(https://docs.oracle.com/javase/8/docs/technotes/tools/unix/keytool.html)を使って生成することができます。全てのflinkコンポーネントはキーストアとトラストストア ファイルへの読み込みアクセスを持つ必要があります。
自己署名の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を持つホスト名にします
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
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
スタンドアローンクラスア内の各ノードをローカルファイルシステム内に存在するキーストアおよびトラストストアファイルを取り上げるように設定します。
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
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
キーストアとトラストストアはクラスタのセットアップに依存してYARNセットアップ内で複数の方法で配備できなければなりません。以下は、これを行う2つの方法です
キーストアとトラストストアは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切歯音を開始することができます。
キーストアおよびトラストストアを配布するためにYARNクライアントのファイル発送オプション (-yt) を使うことができます。同じキーストアが全てのノード上で配備されるため、全てのノードについてキーストア内の1つの証明書が提供されるようにする必要があります。これは、証明書内の Subject Alternative Name(SAN) 拡張を使いそれをクラスタ内の全てのノード上(ホスト名とipアドレス)でカバーするように設定するか、ワイルドカードのドメイン名(もしクラスタのセットアップがそれ相応にされている場合)のどちらかを使うことで、行うことができます。
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
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のデフォルトのトラストストアに追加します。