Что такое URL для Kibana UI
http://grs-preprodkubemaster01:5601/kibana
Я следовал за документами и установил Kibana. Когда я использовал службу как тип: LoadBalancer, служба не запускалась, поэтому я удалил тип: LoadBalancer и позволил ему по умолчанию использовать ClusterIP, он подошел нормально. (Обратите внимание, у меня нет AWS) Но я не уверен, как получить доступ к интерфейсу, я пробовал этот URL, но он не работает. http://my-preprodkubemaster01/api/v1/proxy/namespaces/kube-system/services/elasticsearch-logging/app/kibana любые идеи о том, как получить доступ к пользовательскому интерфейсу Kibana. Я проверил сервис, развертывание и все проверено зеленым.
Еще я попробовал этот URL с этим URL, который я получил из команды kubectl cluster-info https://10.123.24.107:6443/api/v1/namespaces/kube-system/services/kibana-logging/proxy Однако это показывает мне эту ошибку
{
kind: "Status",
apiVersion: "v1",
metadata: { },
status: "Failure",
message: "services "kibana-logging" is forbidden: User "system:anonymous" cannot get services/proxy in the namespace "kube-system"",
reason: "Forbidden",
details: {
name: "kibana-logging",
kind: "services"
},
code: 403
}
Итак, в качестве еще одной попытки я использовал службу Kibana в качестве NodePort, но это тоже не сработало.
apiVersion: v1
kind: Service
metadata:
name: kibana-logging
namespace: kube-system
labels:
k8s-app: kibana-logging
kubernetes.io/cluster-service: "true"
addonmanager.kubernetes.io/mode: Reconcile
kubernetes.io/name: "Kibana"
spec:
selector:
k8s-app: kibana-logging
type: NodePort
ports:
- port: 5601
protocol: TCP
targetPort: ui
nodePort: 30887
$ kubectl -n kube-system get rc,svc,cm,po
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
svc/elasticsearch-logging ClusterIP 10.98.10.182 <none> 9200/TCP 12m
svc/heapster ClusterIP 10.107.184.85 <none> 80/TCP 3d
svc/kibana-logging NodePort 10.102.254.129 <none> 5601:30887/TCP 12m
svc/kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP 3d
svc/kubernetes-dashboard ClusterIP 10.105.30.246 <none> 80/TCP 3d
svc/monitoring-influxdb ClusterIP 10.109.144.39 <none> 8086/TCP 3d
Я хотел бы знать, какой URL я должен использовать для доступа к пользовательскому интерфейсу Kibana. Пожалуйста, обратите внимание, что я не пытался сделать kubectl прокси, и я хотел бы, чтобы это работало без него
3 ответа
Используйте NodePort, который вы определили в вашем сервисе:
https://10.123.24.107:30887
Я получил его для работы с этими изменениями во входном конфиге
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: kube
namespace: kube-system
annotations:
kubernetes.io/ingress.class: nginx
nginx.org/rewrites: "serviceName=kubernetes-dashboard rewrite=/;serviceName=kibana-logging rewrite=/"
spec:
rules:
- host: HOSTNAME_OF_MASTER
http:
paths:
- path: /kube-ui/
backend:
serviceName: kubernetes-dashboard
servicePort: 80
- path: /kibana/
backend:
serviceName: kibana-logging
servicePort: 5601
и мой Kibana Serive настроен как Nodeport
apiVersion: v1
kind: Service
metadata:
name: kibana-logging
namespace: kube-system
labels:
k8s-app: kibana-logging
kubernetes.io/cluster-service: "true"
addonmanager.kubernetes.io/mode: Reconcile
kubernetes.io/name: "Kibana"
spec:
type: NodePort
ports:
- port: 5601
protocol: TCP
targetPort: ui
selector:
k8s-app: kibana-logging
и приборная панель также настроена так
# ------------------- Dashboard Service ------------------- #
kind: Service
apiVersion: v1
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kube-system
spec:
type: NodePort
ports:
- port: 80
targetPort: 9090
selector:
k8s-app: kubernetes-dashboard
как только у вас будет запущен svc, вы сможете получить доступ к kibana с помощью NodePort с любого узла. Пример: http://node01_ip/: 31325/app/kibana
$ kubectl get svc -o wide -n=kube-system
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
elasticsearch-logging ClusterIP 10.xx.120.130 <none> 9200/TCP 11h k8s-app=elasticsearch-logging
heapster ClusterIP 10.xx.232.165 <none> 80/TCP 11h k8s-app=heapster
kibana-logging NodePort 10.xx.39.255 <none> 5601:31325/TCP 11h k8s-app=kibana-logging
kube-dns ClusterIP 10.xx.0.xx <none> 53/UDP,53/TCP 12h k8s-app=kube-dns
kubernetes-dashboard NodePort 10.xx.xx.xx <none> 80:32086/TCP 11h k8s-app=kubernetes-dashboard
monitoring-influxdb ClusterIP 10.13.199.138 <none> 8086/TCP 11h k8s-app=influxdb
Наиболее распространенный способ выставить внутренний сервер вне кластера - это Ingress.
Во-первых, у вас должен быть запущен контроллер Ingress в вашем кластере Kubernetes.
Существует два типа поддерживаемых контроллеров Ingress - GCE и nginx
Затем вам нужно создать файл yaml, как показано ниже, и изменить его в соответствии с вашими потребностями:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: test-ingress
spec:
backend:
serviceName: testsvc
servicePort: 80
Когда вы создаете его с помощью kubectl create -f
, вы должны увидеть что-то вроде этого:
$ kubectl get ingress
NAME RULE BACKEND ADDRESS
test-ingress - testsvc:80 1.2.3.4
В этом примере 1.2.3.4
IP-адрес, выделенный контроллером Ingress.
Когда все будет готово, вы сможете получить доступ к своему приложению (Kibana) по IP. 1.2.3.4
Пожалуйста, найдите больше примеров и вариантов использования в документации Ingress
Вы также можете предоставить сервис Kubernetes без использования ресурса Ingress: