首页 > 解决方案 > Docker 桌面上的 Kubernetes 仪表板和入口

问题描述

我正在尝试通过 Ingress 访问本地 PC 上的 kubernetes 仪表板。到目前为止我已经完成的步骤是:

  1. 通过以下方式安装 Nginx Ingress:
    kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.44.0/deploy/static/provider/cloud/deploy.yaml

PS D:\dev\kubernetes-dashboard-ingress> kubectl get all -n ingress-nginx
NAME                                            READY   STATUS      RESTARTS   AGE
pod/ingress-nginx-admission-create-7rzdl        0/1     Completed   0          148m
pod/ingress-nginx-admission-patch-295pf         0/1     Completed   0          148m
pod/ingress-nginx-controller-7fc74cf778-jz6ts   1/1     Running     0          148m

NAME                                         TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
service/ingress-nginx-controller             LoadBalancer   10.106.183.115   localhost     80:30673/TCP,443:32591/TCP   148m
service/ingress-nginx-controller-admission   ClusterIP      10.103.188.122   <none>        443/TCP                      148m

NAME                                       READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/ingress-nginx-controller   1/1     1            1           148m

NAME                                                  DESIRED   CURRENT   READY   AGE
replicaset.apps/ingress-nginx-controller-7fc74cf778   1         1         1       148m

NAME                                       COMPLETIONS   DURATION   AGE
job.batch/ingress-nginx-admission-create   1/1           16s        148m
job.batch/ingress-nginx-admission-patch    1/1           16s        148m
  1. 安装 Kubernetes 仪表板:
   kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0/aio/deploy/recommended.yaml

当我检查 kubernetes 仪表板命名空间时,我注意到该服务正在端口 443 上运行:

PS D:\dev\kubernetes-dashboard-ingress> kubectl  get service -n kubernetes-dashboard -o wide
NAME                        TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE    SELECTOR
dashboard-metrics-scraper   ClusterIP   10.110.109.6     <none>        8000/TCP   135m   k8s-app=dashboard-metrics-scraper
kubernetes-dashboard        ClusterIP   10.110.230.166   <none>        443/TCP    135m   k8s-app=kubernetes-dashboard

所以我创建了 Ingress 规则:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: dashboard-ingress
  namespace: kubernetes-dashboard
  annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/ssl-passthrough: "true"
    nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
spec:
  rules:
  - host: "my-dashboard.com"
    http:
      paths:
      - pathType: Prefix
        path: "/"
        backend:
          service:
            name: kubernetes-dashboard
            port: 
              number: 443

并应用此规则后:

PS D:\dev\kubernetes-dashboard-ingress> kubectl  get ingress -n kubernetes-dashboard -o wide
Warning: extensions/v1beta1 Ingress is deprecated in v1.14+, unavailable in v1.22+; use networking.k8s.io/v1 Ingress
NAME                CLASS    HOSTS                ADDRESS     PORTS   AGE
dashboard-ingress   <none>   my-dashboard.com   localhost   80      121m

我只是在我的 Windows 主机文件中添加以下条目:

127.0.0.1 my-dashboard.com

但是,当我尝试通过浏览器 ( http://my-dashboard.com ) 访问仪表板时,我什么也没得到。我错过了什么吗?

我在这里学习教程:https ://www.youtube.com/watch?v=X48VuDVv0do 。本教程是使用 minikube 完成的 - 所以仪表板在端口 80 上可用。而我直接从上面的 github 安装的仪表板在端口 443 上可用。我需要配置一些证书/密码吗?我注意到 kubernetes-dashboard 在 Secret 中创建了一些东西:

PS D:\dev\kubernetes-dashboard-ingress> kubectl  get secret -n kubernetes-dashboard -o wide
NAME                               TYPE                                  DATA   AGE
default-token-97skl                kubernetes.io/service-account-token   3      140m
kubernetes-dashboard-certs         Opaque                                0      140m
kubernetes-dashboard-csrf          Opaque                                1      140m
kubernetes-dashboard-key-holder    Opaque                                2      140m
kubernetes-dashboard-token-rwgs4   kubernetes.io/service-account-token   3      140m

如果我试图描述 Ingress:

PS D:\dev\kubernetes-dashboard-ingress> kubectl describe ingress  dashboard-ingress -n kubernetes-dashboard
Warning: extensions/v1beta1 Ingress is deprecated in v1.14+, unavailable in v1.22+; use networking.k8s.io/v1 Ingress
Name:             dashboard-ingress
Namespace:        kubernetes-dashboard
Address:          localhost
Default backend:  default-http-backend:80 (<error: endpoints "default-http-backend" not found>)
Rules:
  Host                Path  Backends
  ----                ----  --------
  my-dashboard.com
                      /   kubernetes-dashboard:443 (10.1.0.106:8443)
Annotations:          kubernetes.io/ingress.class: nginx
                      nginx.ingress.kubernetes.io/backend-protocol: HTTPS
                      nginx.ingress.kubernetes.io/ssl-passthrough: true
Events:
  Type    Reason  Age                   From                      Message
  ----    ------  ----                  ----                      -------
  Normal  Sync    7m4s (x10 over 144m)  nginx-ingress-controller  Scheduled for sync

我知道我可以使用 kubectl 代理访问仪表板 - 但我想测试 Ingress(学习它)。先感谢您!

我正在运行以下内容:

标签: kuberneteskubernetes-ingressnginx-ingressdocker-desktop

解决方案


您的服务名称似乎是错误的:

您列出了您的服务:

PS D:\dev\kubernetes-dashboard-ingress> kubectl  get service -n kubernetes-dashboard -o wide
NAME                        TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE    SELECTOR
dashboard-metrics-scraper   ClusterIP   10.110.109.6     <none>        8000/TCP   135m   k8s-app=dashboard-metrics-scraper
kubernetes-dashboard        ClusterIP   10.110.230.166   <none>        443/TCP    135m   k8s-app=kubernetes-dashboard

在您的入口中:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: dashboard-ingress
  namespace: kubernetes-dashboard
  annotations:
    nginx.ingress.kubernetes.io/ssl-passthrough: "true"
    nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
spec:
  rules:
  - host: "my-dashboard.com"
    http:
      paths:
      - pathType: Prefix
        path: "/"
        backend:
          service:
            name: my-dashboard  # <<< This line should be kubernetes-dashboard
            port: 
              number: 443

推荐阅读