应用常见问题
可以在 Istio mesh 中运行 Casandra 吗?
默认情况下,Cassandra 广播用于绑定(接受连接)到其他 Cassandra 节点的地址作为其地址。这通常是 Pod IP 地址,无需服务网格即可正常工作。但是,对于服务网格,此配置不起作用。Istio 和其他服务网格需要 localhost
(127.0.0.1
)作为绑定地址。
有两个配置参数要注意:
listen_address
和 broadcast_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 地址:
通过从属 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
我能在 Istio 内部运行 Zookeeper 吗?
默认情况下,Zookeeper 通过监听 pod 的 IP 地址用来在服务间通信。而 Istio 和其他的服务网格需要监听在 localhost
(127.0.0.1
)地址上。
有一个配置参数可以来修改这个默认行为:
quorumListenOnAllIPs
。
这个选项可以让 Zookeeper 监听所有的地址包括 localhost
。
通过下面的命令可以把这个参数设置为 true
,$ZK_CONFIG_FILE
是你 Zookeeper 配置文件的路径。
$ 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
或 localhost
(127.0.0.1
) 并将 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 网络设置。