应用常见问题
我可以在 Istio mesh 中运行 Casandra 吗?
默认情况下,Cassandra 广播用于绑定(接受连接)到其他 Cassandra 节点的地址作为其地址。这通常是 Pod IP 地址,无需服务网格即可正常工作。但是,对于服务网格,此配置不起作用。Istio 需要(0.0.0.0
)作为绑定地址。
有两个配置参数要注意:
listen_address
和 broadcast_address
。为了在 Istio 网格中运行 Cassandra,应该将 listen_address
参数设置为 0.0.0.0
,将 broadcast_address
参数设置为 Pod IP 地址。
这些配置参数在 Cassandra 配置目录(例如 /etc/cassandra
)的 cassandra.yaml
中定义。有多种用于启动 Cassandra 的脚本(和 yaml 文件),应注意这些脚本如何设置这些参数。例如,一些用于配置和启动 Cassandra 的脚本使用环境变量 CASSANDRA_LISTEN_ADDRESS
的值来设置 listen_address
。
我可以在 Istio 内部运行 Zookeeper 吗?
默认情况下,Zookeeper 通过监听 pod 的 IP 地址用来在服务间通信。而 Istio 和其他的服务网格需要监听在 0.0.0.0
地址上。
有一个配置参数可以来修改这个默认行为:
quorumListenOnAllIPs
。
这个选项可以让 Zookeeper 监听所有地址。
通过下面的命令将 Zookeeper 中的 $ZK_CONFIG_FILE
参数设置为 true
。
$ echo "quorumListenOnAllIPs=true" >> $ZK_CONFIG_FILE
我可以在 Istio 网格中运行 Elasticsearch 吗?
在 Istio 中运行 Elasticsearch,有两个 Elasticsearch 配置参数需要被正确设置:network.bind_host
和 network.publish_host
。默认情况下,这些参数值被设置成 network.host
参数。如果 network.host
被设置成 0.0.0.0
,Elasticsearch 很可能选择 pod IP 作为发布地址并且不需要更进一步的配置。
如果默认配置没有生效,你可以将 network.bind_host
设置为 0.0.0.0
并将 network.publish_host
设置为 pod IP,例如:
...
containers:
- name: elasticsearch
image: docker.elastic.co/elasticsearch/elasticsearch:7.2.0
env:
- name: network.bind_host
value: 127.0.0.1
- name: network.publish_host
valueFrom:
fieldRef:
fieldPath: status.podIP
...
了解更多信息请查看 Elasticsearch 网络设置 。
我可以在 Istio 网格内运行 Apache NiFi 吗?
在 Istio 上运行 Apache NiFi 是有一些挑战的。这些挑战来自集群运行的需求。 例如,要求群集组件必须在整个群集范围内都可以唯一寻址的主机名。该要求与 Istio 的要求(即工作负载在容器组中绑定并侦听“0.0.0.0”)相冲突。
根据您 NiFi 配置和部署情况,有不同的方法来绕开这些问题。 在 NiFi 中,至少有以下三种方法来指定群集网络应使用的主机名:
nifi.remote.input.host
- 将提供给客户端以连接到该NiFi实例进行站点到站点通信的主机名。默认情况下使用InetAddress.getLocalHost().getHostName()
来获取本机的主机名。 在类似 UNIX 的操作系统上,这通常是来自hostname
命令。nifi.web.https.host
-HTTPS主机。 默认情况下为空白。jetty 服务器将在该主机名上运行,并且需要在整个群集中可寻址,以便与其他节点进行复制。nifi.cluster.node.address
- 节点的标准地址。默认情况下为空白。这也用于集群协调,并且需要在集群内唯一地寻址。
一些注意事项:
- 由于对上述唯一寻址的联网要求, 对
nifi.web.https.host
使用空白或localhost
的设置在这种情况下将不起作用。 - 除非您对所有在 NiFi 部署中具有所有访问角色的用户都表示满意,否则 HTTP 并不是可行的解决方案,因为 NiFi 不会通过 HTTP 执行用户身份验证。
- 明确指定 NiFi 应该使用的网络接口可以帮助解决问题并允许NiFi工作:
修改
nifi.properties
,其中xxx
是与工作IP对应的网络接口(因环境/云提供商而异),yyy
是容器/容器组的环回接口(即 lo ):
nifi.web.https.network.interface.default = xxx
nifi.web.https.network.interface.lo = yyy
真实示例(适用于 IBM Cloud,也许适用于其他示例)如下所示:
nifi.web.https.network.interface.default = eth0
nifi.web.https.network.interface.lo = lo
我可以在 Istio 网格内运行 Redis 吗?
与在 Istio 服务网格中部署的其他服务类似,Redis 实例需要监听 0.0.0.0
。每个 Redis 从属实例都应声明一个地址,主服务器可以使用该地址来访问它,但是,该地址不能是 0.0.0.0
。
使用 Redis 配置参数 replica-announce-ip
来公布正确的地址。例如,使用以下步骤将 replica-announce-ip
设置为每个 Redis 从属实例的 IP 地址:
通过从属 StatefulSet
的 env
小节中定义的环境变量传递 Pod IP 地址:
- name: "POD_IP"
valueFrom:
fieldRef:
fieldPath: status.podIP
另外,在 command
小节下添加以下内容:
echo "" >> /opt/bitnami/redis/etc/replica.conf
echo "replica-announce-ip $POD_IP" >> /opt/bitnami/redis/etc/replica.conf