Interesting. According to your experience it looks like Openstack internal LoadBalancer prevents the internal service DNS from resolving. Which would make sense, I guess, if you want another "internal" endpoint.
If that helps, you should be able to keep the existing Elasticsearch service with default options, so Kibana can reach it normally. Then create your own additional Service to target Elasticsearch Pods the way you want:
apiVersion: v1
kind: Service
metadata:
name: your-service-name-here
annotations:
service.beta.kubernetes.io/openstack-internal-load-balancer: "true"
spec:
externalTrafficPolicy: Local
type: LoadBalancer
ports:
- name: https
port: 9200
protocol: TCP
targetPort: 9200
selector:
common.k8s.elastic.co/type: elasticsearch
elasticsearch.k8s.elastic.co/cluster-name: elasticsearch-sample