Панель приборов Kubernetes через Ingress
У меня есть кластер Kubernetes с контроллером Ingress/Traefik
Кроме того, я установил панель мониторинга, используя стандартную конфигурацию отсюда: https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml
Я пытаюсь получить доступ к панели инструментов через вход, но я получаю ошибку 404
404 page not found
Мой файл ingress.yml выглядит так
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: "traefik"
name: app-ingress-system
namespace: kube-system
spec:
tls:
- hosts:
- dashboard.domain.com
secretName: kubernetes-dashboard-certs
rules:
- host: dashboard.domain.com
http:
paths:
- path: /
backend:
serviceName: kubernetes-dashboard
servicePort: 443
Я пробовал другой - путь: (как / Dashboard, / Proxy) тот же результат
3 ответа
Это происходит потому, что kubernetes-dashboard-certs
нет файла tls.crt
а также tls.key
которые ожидаются от traefik. Вы должны получить это в журналах traefik.
Следующие проблемы будут между сертификатами traefik и сертификатами приборной панели. Я до сих пор не понимаю, как это исправить и настроить траэфик с опцией:
ssl.insecureSkipVerify: "true"
Последнее, что у меня было, это то, что конечная точка http не принимает вход в систему, затем, наконец, я объявляю вход, который перенаправляет http на https следующим образом:
kubectl apply -f - << EOF
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kubernetes-dashboard
annotations:
kubernetes.io/ingress.class: traefik
traefik.ingress.kubernetes.io/ssl-redirect: "true"
spec:
rules:
- host: dashboard.domain.com
http:
paths:
- path: /
backend:
serviceName: kubernetes-dashboard
servicePort: 443
EOF
вы можете получить доступ к панели управления kubernetes, не отключая проверку ssl для всего сервера traefik, создав собственный серверный транспорт для ingressroute
---
apiVersion: traefik.containo.us/v1alpha1
kind: ServersTransport
metadata:
name: kubernetes-dashboard-transport
namespace: kubernetes-dashboard
spec:
serverName: kubernetes-dashboard
insecureSkipVerify: true
---
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
name: kubernetes-dashboard-ingress
namespace: kubernetes-dashboard
spec:
entryPoints: # [1]
- websecure
routes: # [2]
- kind: Rule
match: Host(`k3sdashboard.example.xyz`) # [3]
priority: 10 # [4]
services: # [8]
- kind: Service
name: kubernetes-dashboard
namespace: kubernetes-dashboard
port: 443 # [9]
serversTransport: kubernetes-dashboard-transport
tls: # [11]
certResolver: dns-cloudflare
Этот код работает на microk8s. В некоторых системах необходимо изменить тип службы kubernetes-dasboard на NodePort
kubectl -n kube-system edit svc kubernetes-dashboard
Секрет tls для yourdomain.com должен находиться в том же пространстве имен, что и kubernates-dashboard, должен иметь файлы crt и key.
kubectl -n kube-system create secret tls yourdomain.com-tls --key="yourdomain.com.key" --cert="yourdomain.com.crt"
Используйте этот код для создания входа
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-dashboard
namespace: kube-system
annotations:
kubernetes.io/ingress.class: public
#this redirect to https if try to enter over http
nginx.ingress.kubernetes.io/ssl-redirect: "true"
#this is required, because dashboard only run over HTTPS
nginx.ingress.kubernetes.io/backend-protocol: HTTPS
#this requiered if want to protect site
#nginx.ingress.kubernetes.io/whitelist-source-range: <here your public ip>,<here server ip if want access from server>
spec:
tls:
- hosts:
- dashboard.yourdomain.com
secretName: yourdomain.com-tls
rules:
- host: dashboard.yourdomain.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: kubernetes-dashboard
port:
number: 8443