认证和加密
安全认证
Flink整个系统有三种认证方式:
- 使用kerberos认证:Flink yarn client与Yarn Resource Manager、JobManager与Zookeeper、JobManager与HDFS、TaskManager与HDFS、Kafka与TaskManager、TaskManager和Zookeeper。
- 使用security cookie进行认证:Flink yarn client与Job Manager、JobManager与TaskManager、TaskManager与TaskManager。
- 使用YARN内部的认证机制:Yarn Resource Manager与Application Master(简称AM)。
- Flink的JobManager与YARN的AM是在同一个进程下。
- 如果用户集群开启Kerberos认证需要使用kerberos认证。
- 针对MRS 3.x之前版本,Flink不支持使用security cookie进行认证方式。
当前一个Flink集群只支持一个用户,一个用户可以创建多个Flink集群。
加密传输
Flink整个系统有三种加密传输方式:
- 使用Yarn内部的加密传输方式:Flink yarn client与Yarn Resource Manager、Yarn Resource Manager与Job Manager。
- SSL:Flink yarn client与JobManager、JobManager与TaskManager、TaskManager与TaskManager。
- 使用Hadoop内部的加密传输方式:JobManager和HDFS、TaskManager和HDFS、JobManager与ZooKeeper、TaskManager与ZooKeeper。
![](https://support.huaweicloud.com/intl/zh-cn/ae-ad-1-cmpntguide-mrs/public_sys-resources/note_3.0-zh-cn.png)
Yarn内部和Hadoop内部都不需要用户配置加密,用户只需要配置SSL加密传输方式。
配置SSL传输,用户主要在客户端的“flink-conf.yaml”文件中做如下配置:
- 打开SSL开关和设置SSL加密算法,针对MRS 3.x及之后版本,配置参数如表2所示,请根据实际情况修改对应参数值。
表2 参数描述 参数
参数值示例
描述
security.ssl.enabled
true
打开SSL总开关。
akka.ssl.enabled
true
打开akka SSL开关。
blob.service.ssl.enabled
true
打开blob通道SSL开关。
taskmanager.data.ssl.enabled
true
打开taskmanager之间通信的SSL开关。
security.ssl.algorithms
TLS_DHE_RSA_WITH_AES_128_CBC_SHA256,TLS_DHE_DSS_WITH_AES_128_CBC_SHA256
设置SSL加密的算法。
针对MRS 3.x之前版本,配置参数如表3所示。
表3 参数描述 参数
参数值示例
描述
security.ssl.internal.enabled
true
打开内部SSL开关。
akka.ssl.enabled
true
打开akka SSL开关。
blob.service.ssl.enabled
true
打开blob通道SSL开关。
taskmanager.data.ssl.enabled
true
打开taskmanager之间通信的SSL开关。
security.ssl.algorithms
TLS_RSA_WITH_AES128CBC_SHA256
设置SSL加密的算法。
针对MRS 3.x之前版本,如下参数见表4,在MRS的Flink默认配置中不存在,用户如果开启外部连接SSL,则需要添加以下参数。开启外部连接SSL后,因为YARN目前的开源版本无法代理HTTPS请求,所以无法通过YARN代理访问Flink的原生页面,用户可以在集群的同一个VPC下,创建windows虚拟机,在该虚拟机中访问Flink 原生页面。表4 参数描述 参数
参数值示例
描述
security.ssl.rest.enabled
true
打开外部SSL开关,若该参数配置为“true”,请参考表4配置相关参数。
security.ssl.rest.keystore
${path}/flink.keystore
keystore的存放路径。
security.ssl.rest.keystore-password
123456
keystore的password,“123456”表示需要用户输入自定义设置的密码值。
security.ssl.rest.key-password
123456
ssl key的password,“123456”表示需要用户输入自定义设置的密码值。
security.ssl.rest.truststore
${path}/flink.truststore
truststore存放路径。
security.ssl.rest.truststore-password
123456
truststore的password,“123456”表示需要用户输入自定义设置的密码值。
如果打开Task Manager之间data传输通道的SSL,对性能会有较大影响,需要用户从安全和性能综合考虑。
- 在Flink客户端的bin目录下,执行命令sh generate_keystore.sh <password>,请参考认证和加密,针对MRS 3.x及之后版本,表5中的配置项会被默认赋值,用户也可以手动配置。
表5 参数描述 参数
参数值示例
描述
security.ssl.keystore
${path}/flink.keystore
keystore的存放路径,“flink.keystore”表示用户通过generate_keystore.sh*工具生成的keystore文件名称。
security.ssl.keystore-password
123456
keystore的password,“123456”表示需要用户输入自定义设置的密码值。
security.ssl.key-password
123456
ssl key的password,“123456”表示需要用户输入自定义设置的密码值。
security.ssl.truststore
${path}/flink.truststore
truststore存放路径,“flink.truststore”表示用户通过generate_keystore.sh*工具生成的truststore文件名称。
security.ssl.truststore-password
123456
truststore的password,“123456”表示需要用户输入自定义设置的密码值。
针对MRS 3.x之前版本,generate_keystore.sh不需手动生成,表6中的配置项会被默认赋值,用户也可以手动配置。
表6 参数描述 参数
参数值示例
描述
security.ssl.internal.keystore
${path}/flink.keystore
keystore的存放路径,“flink.keystore”表示用户通过generate_keystore.sh*工具生成的keystore文件名称。
security.ssl.internal.keystore-password
123456
keystore的password,“123456”表示需要用户输入自定义设置的密码值。
security.ssl.internal.key-password
123456
ssl key的password,“123456”表示需要用户输入自定义设置的密码值。
security.ssl.internal.truststore
${path}/flink.truststore
truststore存放路径,“flink.truststore”表示用户通过generate_keystore.sh*工具生成的truststore文件名称。
security.ssl.internal.truststore-password
123456
truststore的password,“123456”表示需要用户输入自定义设置的密码值。
针对MRS 3.x之前版本,如果开启外部连接SSL,即 security.ssl.rest.enabled 配置为 true,则如下参数见表7,用户需要配置。
表7 参数说明 参数
参数值示例
描述
security.ssl.rest.enabled
true
打开外部SSL开关,若该参数配置为“true”,请参考表7配置相关参数。
security.ssl.rest.keystore
${path}/flink.keystore
keystore的存放路径
security.ssl.rest.keystore-password
123456
keystore的password,“123456”表示需要用户输入自定义设置的密码值。
security.ssl.rest.key-password
123456
ssl key的password,“123456”表示需要用户输入自定义设置的密码值。
security.ssl.rest.truststore
${path}/flink.truststore
truststore存放路径
security.ssl.rest.truststore-password
123456
truststore的password,“123456”表示需要用户输入自定义设置的密码值。
- 配置keystore或truststore文件路径为相对路径时,Flink Client执行命令的目录需要可以直接访问该相对路径。Flink有两种执行方式来传输keystore和truststore文件。
- 在Flink的CLI yarn-session.sh命令中增加“-t”选项来传输keystore和truststore文件到各个执行节点。如:
./bin/yarn-session.sh -t ssl/
- 在Flink run命令中增加“-yt”选项来传输keystore和truststore文件到各个执行节点。如:
./bin/flink run -yt ssl/ -ys 3 -m yarn-cluster -c org.apache.flink.examples.java.wordcount.WordCount /opt/client/Flink/flink/examples/batch/WordCount.jar
- 在举例当中的“ssl/”是Flink Client端目录下的子目录,该目录是用来存放SSL keystore、truststore相关配置文件。
- Flink Client执行命令的当前路径需要能访问到“ssl/”相对路径。
- 在Flink的CLI yarn-session.sh命令中增加“-t”选项来传输keystore和truststore文件到各个执行节点。如:
- 配置keystore或truststore文件路径为绝对路径时,需要在Flink Client以及各个节点的该绝对路径上放置keystore和truststore文件。
针对MRS 3.x之前版本,提交作业的用户需要具有读取keystore和truststore文件的权限。
Flink有两种方式执行应用程序,且执行命令中不需要使用“-t”或“-yt”来传输keystore和truststore文件。
- 使用Flink的CLI yarn-session.sh命令执行应用程序。如:
./bin/yarn-session.sh
- 使用Flink run命令执行应用程序。如:
./bin/flink run -ys 3 -m yarn-cluster -c org.apache.flink.examples.java.wordcount.WordCount /opt/client/Flink/flink/examples/batch/WordCount.jar
- 使用Flink的CLI yarn-session.sh命令执行应用程序。如: