应用常见问题

可以在 Istio mesh 中运行 Casandra 吗?

默认情况下,Cassandra 广播用于绑定(接受连接)到其他 Cassandra 节点的地址作为其地址。这通常是 Pod IP 地址,无需服务网格即可正常工作。但是,对于服务网格,此配置不起作用。Istio 和其他服务网格需要 localhost127.0.0.1) 作为绑定地址。

有两个配置参数要注意:listen_addressbroadcast_address。为了在 Istio 网格中运行 Cassandra,应该将 listen_address 参数设置为 127.0.0.1,将 broadcast_address 参数设置为 Pod IP 地址。

这些配置参数在 Cassandra 配置目录(例如 /etc/cassandra)的 cassandra.yaml 中定义。有多种用于启动 Cassandra 的脚本(和 yaml 文件),应注意这些脚本如何设置这些参数。例如,一些用于配置和启动 Cassandra 的脚本使用环境变量 CASSANDRA_LISTEN_ADDRESS 的值来设置 listen_address

我可以在 Istio 网格内运行 Redis 吗?

与在 Istio 服务网格中部署的其他服务类似,Redis 实例需要监听 localhost (127.0.0.1)。每个 Redis 从属实例都应声明一个地址,主服务器可以使用该地址来访问它,但是,该地址不能是 localhost (127.0.0.1)。

使用 Redis 配置参数 replica-announce-ip 来公布正确的地址。例如,使用以下步骤将 replica-announce-ip 设置为每个 Redis 从属实例的 IP 地址:

通过从属 StatefulSetenv 小节中定义的环境变量传递 Pod IP 地址:

  1. - name: "POD_IP"
  2. valueFrom:
  3. fieldRef:
  4. fieldPath: status.podIP

另外,在 command 小节下添加以下内容:

  1. echo "" >> /opt/bitnami/redis/etc/replica.conf
  2. echo "replica-announce-ip $POD_IP" >> /opt/bitnami/redis/etc/replica.conf
我能在 Istio 内部运行 Zookeeper 吗?

默认情况下,Zookeeper 通过监听 pod 的 IP 地址用来在服务间通信。而 Istio 和其他的服务网格需要监听在 localhost127.0.0.1)地址上。

有一个配置参数可以来修改这个默认行为:quorumListenOnAllIPs。这个选项可以让 Zookeeper 监听所有的地址包括 localhost。通过下面的命令可以把这个参数设置为 true$ZK_CONFIG_FILE 是你 Zookeeper 配置文件的路径。

  1. $ echo "quorumListenOnAllIPs=true" >> $ZK_CONFIG_FILE
我能在 Istio 网格中运行 Elasticsearch 吗?

在 Istio 中运行 Elasticsearch,有两个 Elasticsearch 配置参数需要被正确设置:network.bind_hostnetwork.publish_host。默认情况下,这些参数值被设置成 network.host 参数。如果 network.host 被设置成 0.0.0.0,Elasticsearch 很可能选择 pod IP 作为发布地址并且不需要更进一步的配置。

如果默认配置没有生效,你可以将 network.bind_host 设置为 0.0.0.0localhost (127.0.0.1) 并将 network.publish_host 设置为 pod IP,例如:

  1. ...
  2. containers:
  3. - name: elasticsearch
  4. image: docker.elastic.co/elasticsearch/elasticsearch:7.2.0
  5. env:
  6. - name: network.bind_host
  7. value: 127.0.0.1
  8. - name: network.publish_host
  9. valueFrom:
  10. fieldRef:
  11. fieldPath: status.podIP
  12. ...

了解更多信息请查看 Elasticsearch 网络设置