J'ai Elasticsearch POD + SERVICE et Kibana POD + SERVICE. J'essaie de connecter mon Kibana POD au service Elasticsearch, mais j'obtiens des erreurs de connexion.
Voici mon yaml de Kibaba POD:
apiVersion: v1
kind: Service
metadata:
name: elasticsearch-service
spec:
ports:
- port: 9200
name: serving
protocol: TCP
- port: 9300
name: node2node
protocol: TCP
selector:
app: elasticsearch
J'obtiens les erreurs suivantes :
FATAL ValidationError: child "elasticsearch" fails because [child "hosts" fails because [single value of "hosts" fails because ["hosts" must be a valid uri with a scheme matching the http|https pattern]]]
D'après ce que je comprends, j'obtiens une erreur car elasticsearch.url ne commence pas par http / https. J'ai donc essayé d'exécuter args: ["-c", "bin / kibana --elasticsearch.url = 'http: // elasticsearch-service: 9200'"] , mais j'obtiens aussi des erreurs de connexion (Je pense que parce que le service n'est pas destiné à être pointé avec http / https).
C'est le yaml du service elasticsearch (qui fonctionne bien):
apiVersion: v1
kind: Pod
metadata:
name: kibana
labels:
app: kibana
spec:
ports:
containers:
- name: kibana
image: kibana:6.6.1
command: ["/bin/sh"]
args: ["-c", "bin/kibana --elasticsearch.url='elasticsearch-service:9200'"]
Avec d'autres POD, je pourrais me connecter avec elasticsearch-service: 9200, mais Kibana démend http / https. Comment puis-je les faire se connecter?
4 Réponses :
Pouvez-vous accéder au service elasticsearch à partir du pod Kibana. Supprimez le service elasticsearch unique tout autour. Ce n'est pas obligatoire.
De la documentation officielle docs :
la version docker-compose est:
apiVersion: v1
kind: Pod
metadata:
name: kibana
labels:
app: kibana
spec:
ports:
containers:
- name: kibana
image: docker.elastic.co/kibana/kibana:6.6.1
env:
- name: ELASTICSEARCH_HOSTS
value: "http://elasticsearch-service:9200"
Vous venez de le convertir en service kubernetes soit manuellement, soit en utilisant l'outil kompose et de l'exécuter.
Ou vous pouvez essayer pour insérer la variable env dans votre fichier existant et supprimer l'option d'url elasticsearch de la commande ur.
http://elasticsearch:9200
OU Si vous nommez simplement votre service elasticsearch comme elasticsearch, il devrait fonctionner sans passer n'importe quoi parce que la valeur par défaut est:
ELASTICSEARCH_HOSTS: http://elasticsearch.example.org
exemple avec votre nom de service existant:
version: '2'
services:
kibana:
image: docker.elastic.co/kibana/kibana:6.6.1
environment:
SERVER_NAME: kibana.example.org
ELASTICSEARCH_HOSTS: http://elasticsearch.example.org
n'a pas fonctionné. Je reçois les erreurs suivantes: {"Type": "Journal", "@ Timeestamp": "2019-03-09T18: 24: 22Z", "Tags": ["" wearing "," élasticesear ch "," admin "]," pid ": 1," message ":" Pas de connexions vivantes "} {" Type ":" Journal "," @ horodatage ":" 2019-03-09T18: 24: 22Z "," Tags " : ["w arning", "elasticsicsear ch", "admin"], "pid": 1, "message": "Impossible de relancer la connexion: Elasticsearch: 9200 "}
Vous verrez ces msgs pendant un moment car elasticsearch peut ne pas être actif au démarrage de kibana, assurez-vous que la recherche élastique est déjà en cours d'exécution, c'est quelque chose qui nécessite un dépannage
Assurez-vous également que vous pouvez accéder correctement à l'url elasticsearch que vous utilisez dans la configuration de kibana. peut-être que vous devez l'exposer en tant que service kubernetes
N'utilisez pas le commutateur --elasticsearch.url , utilisez plutôt la variable d'environnement ELASTICSEARCH_URL.
apiVersion: v1
kind: Pod
metadata:
name: kibana
labels:
app: kibana
spec:
ports:
containers:
- name: kibana
image: kibana:6.6.1
command: ["/bin/sh"]
args: ["-c", "bin/kibana"]
env:
- name: ELASTICSEARCH_URL
value: "http://elasticsearch-service:9200"
Je vous suggère également de lire ma réponse dans un autre fil pour une explication plus détaillée du DNS de k8s.
J'ai réussi à résoudre ce problème en ajoutant:
env:
- name: ELASTICSEARCH_URL
value: "http://elasticsearch-service:9200"
- name: ELASTICSEARCH_PORT
value: "9200"
- name: SERVER_BASEPATH
value: /api/v1/namespaces/default/services/kibana-service:5601/proxy
- name: SERVER_HOST
value: "0.0.0.0"
Ce qui est vraiment résolu, c'est l'environnement SERVER_BASEPATH.
Pourriez-vous partager les erreurs que vous obtenez lorsque vous passez un URI complet à kibana? Elasticsearch utilise http sur le port 9200 donc cela devrait fonctionner. Essayez peut-être de supprimer les guillemets simples autour de l'URI