如何通过 Ingress 公开 Linkerd 仪表板

问题描述

我有一个带有 Linkerd 和 Nginx Ingress Controller 的 3 节点 K3s 集群。我使用认配置安装了 Linkerd:

linkerd install | kubectl apply -f -

然后为了安装 Nginx Ingress Controller,我也使用了带有认配置的 helm:

helm repo add ingress-Nginx https://kubernetes.github.io/ingress-Nginx
helm repo update

helm install ingress-Nginx ingress-Nginx/ingress-Nginx

我可以通过调用 linkerd viz dashboard 访问 Linkerd 仪表板,但我想使用 Ingress 定义公开仪表板。我修改了位于 here 的 Linkerd 网站上的示例 yaml 文件,以便我可以使用前缀路径。最后,我的 yaml 文件是这样的:

apiVersion: v1
kind: Secret
type: Opaque
Metadata:
  name: web-ingress-auth
  namespace: linkerd-viz
data:
  auth: YWRtaW46JGFwcjEkbjdDdTZnSGwkRTQ3b2dmN0NPOE5SWWpFakJPa1dNLgoK
---
apiVersion: extensions/v1beta1
kind: Ingress
Metadata:
  name: web-ingress
  namespace: linkerd-viz
  annotations:
    kubernetes.io/ingress.class: 'Nginx'
    Nginx.ingress.kubernetes.io/upstream-vhost: $service_name.$namespace.svc.cluster.local:8084
    Nginx.ingress.kubernetes.io/configuration-snippet: |
      proxy_set_header Origin "";
      proxy_hide_header l5d-remote-ip;
      proxy_hide_header l5d-server-id;      
    Nginx.ingress.kubernetes.io/auth-type: basic
    Nginx.ingress.kubernetes.io/auth-secret: web-ingress-auth
    Nginx.ingress.kubernetes.io/auth-realm: 'Authentication required'
spec:
  rules:
  - http:
      paths:
        - path: /linkerd
          pathType: Prefix
          backend:
            serviceName: web
            servicePort: 8084

对于我的任何其他自定义微服务,我可以简单地通过我的 Nginx 入口服务的公共 IP 地址访问它们。我可以这样获得这个IP:

kubectl describe svc ingress-Nginx-controller | grep "LoadBalancer Ingress" | awk '{ print $3 }'

当我尝试通过 http://EXPOSED_IP/linkerd 访问仪表板时,系统提示我输入我的用户名和密码(认为 admin),但随后出现 404 not found 错误.

有人知道可能是什么问题吗?非常感谢!

解决方法

它永远不会喜欢这条路。它需要在 url 的根上提供服务。所以将路径更改为“/”,它应该可以正常工作。如果这不起作用,我很乐意在本地尝试。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...