问题:
ES 6.8 开始kibana最佳实践改为: 一个kibana只连接一个coordinating only node. 然后在kibana之间做负载均衡.
对于我们这些在容器上搞ELK的就是麻烦了.
问题是这样的:
每个kibana要连接不同的node, 而且只能连接一个node, 那就是说不能在一个deployment里面启动多个kibana
每个kibana一个deployment, 也就是两个service.
两个service如何对应一个ingress?
解决:
尝试1:
通过label将两个service 对应一个ingress后失败, endpoint并没有自动对应起来.看来要自己修改源码才能支持.
尝试2:
利用rancher的service alias完成.
先创建两个service分别对应两个kibana.
service alias 是rancher实现的功能, 通过annotation来关联多个service.
还可以直接跳过service采用workload的方式, 也就是直接对pod.
apiVersion: v1
kind: Service
metadata:
annotations:
field.cattle.io/creatorId: u-hsso6l2lqe
field.cattle.io/ipAddresses: "null"
field.cattle.io/targetDnsRecordIds: '["zabbix-es:zbx-elk-kibana-1","zabbix-es:zbx-elk-kibana-2"]'
field.cattle.io/targetWorkloadIds: "null"
labels:
cattle.io/creator: norman
name: svc-alias-zbx
namespace: zabbix-es
spec:
clusterIP: XXX
ports:
- name: default
port: 5601
protocol: TCP
targetPort: 5601
sessionAffinity: None
type: ClusterIP
缺点: 不是原生k8s的手段, 不知大后期会不会加入类似功能。 不过与其自己实现,直接用rancher的功能也是不错的选择。