kibana 6.8 以上版本在k8s ingress中的负载均衡设置.

问题:

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的功能也是不错的选择。