Панель приборов 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
Другие вопросы по тегам