Linkerd 2.10(Step by Step)—暴露 Dashboard

本文涉及的产品
可观测可视化 Grafana 版,10个用户账号 1个月
简介: Linkerd 2.10(Step by Step)—暴露 Dashboard

您可以通过 ingress 暴露仪表板,而不是每次想要 查看发生了什么时都使用 linkerd viz dashboard。这也会暴露 Grafana。


Nginx



具有 basic auth 的 Nginx


示例 ingress 定义是:


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:
    - host: dashboard.example.com
      http:
        paths:
          - backend:
              serviceName: web
              servicePort: 8084


这会在 dashboard.example.com 上暴露仪表板, 并使用 admin/admin 通过 basic auth 对其进行保护。有关如何更改用户名和密码的详细信息,请查看 ingress-nginx 文档。


带有 oauth2-proxy 的 Nginx


basic auth 的一种更安全的替代方法是使用身份验证代理,例如 oauth2-proxy。

有关如何在 kubernetes 中部署和配置 oauth2-proxy 的参考,请参阅 blog post by Don Bowman。


如果您通过 helm chart 部署 oauth2-proxy,则需要以下值:


config:
  existingSecret: oauth2-proxy
  configFile: |-
    email_domains = [ "example.com" ]
    upstreams = [ "file:///dev/null" ]
ingress:
  enabled: true
  annotations:
    kubernetes.io/ingress.class: nginx
  path: /oauth2
ingress:
  hosts:
    - linkerd.example.com


其中 oauth2-proxy secret 将包含所需的 oauth2 config, 例如 client-idclient-secretcookie-secret


设置后,示例 ingress 将是:


apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: web
  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-signin: https://$host/oauth2/start?rd=$escaped_request_uri
    nginx.ingress.kubernetes.io/auth-url: https://$host/oauth2/auth
spec:
  rules:
    - host: linkerd.example.com
      http:
        paths:
          - backend:
              serviceName: web
              servicePort: 8084


Traefik


示例 ingress 定义是:


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: 'traefik'
    ingress.kubernetes.io/custom-request-headers: l5d-dst-override:web.linkerd-viz.svc.cluster.local:8084
    traefik.ingress.kubernetes.io/auth-type: basic
    traefik.ingress.kubernetes.io/auth-secret: web-ingress-auth
spec:
  rules:
    - host: dashboard.example.com
      http:
        paths:
          - backend:
              serviceName: web
              servicePort: 8084


这会在 dashboard.example.com 上公开仪表板, 并使用 admin/admin 通过 basic auth 对其进行保护。有关如何更改用户名和密码的详细信息,请查看 Traefik 文档。


Ambassador


Ambassador 的工作原理是将mapping 定义 为服务的 annotation。

下面的 annotation 在 dashboard.example.com 上公开了仪表板。


annotations:
    getambassador.io/config: |-
      ---
      apiVersion: ambassador/v1
      kind: Mapping
      name: web-mapping
      host: dashboard.example.com
      prefix: /
      host_rewrite: web.linkerd-viz.svc.cluster.local:8084
      service: web.linkerd-viz.svc.cluster.local:8084


DNS 重绑定保护



为防止 DNS-rebinding 攻击, 仪表板拒绝任何 Host header 不是 localhost127.0.0.1 或 服务名称不是 web.linkerd-viz.svc 的请求。

请注意,此保护还涵盖 Grafana dashboard


上面的 ingress-nginx 配置使用 nginx.ingress.kubernetes.io/upstream-vhost annotation 来正确设置上游 Host header。另一方面,Traefik 不提供该选项,因此您必须手动设置所需的 Host,如下所述。


调整 Host 要求


如果您的 HTTP 客户端(Ingress 或其他方式)不允许重写 Host header, 您可以更改仪表板服务器(dashboard server)使用的验证正则表达式, 该正则表达式通过 enforced-host 容器参数输入到 web deployment 中。

如果您使用 Helm 管理 Linkerd,那么您可以使用 enforcedHostRegexp 值设置主机。


另一种方法是通过 Kustomize,如:自定义安装中所述,使用这样的覆盖:


apiVersion: apps/v1
kind: Deployment
metadata:
  name: web
spec:
  template:
    spec:
      containers:
        - name: web
          args:
            - -linkerd-controller-api-addr=linkerd-controller-api.linkerd.svc.cluster.local:8085
            - -linkerd-metrics-api-addr=metrics-api.linkerd-viz.svc.cluster.local:8085
            - -cluster-domain=cluster.local
            - -grafana-addr=grafana.linkerd-viz.svc.cluster.local:3000
            - -controller-namespace=linkerd
            - -viz-namespace=linkerd-viz
            - -log-level=info
            - -enforced-host=^dashboard\.example\.com$


如果要完全禁用 Host header 检查,请为 -enforced-host 使用空字符串。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
Prometheus Cloud Native 数据可视化
Linkerd 2.10(Step by Step)—4. 如何配置外部 Prometheus 实例
Linkerd 2.10(Step by Step)—4. 如何配置外部 Prometheus 实例
154 0
|
JSON Kubernetes 安全
Linkerd 2.10(Step by Step)—多集群通信
Linkerd 2.10(Step by Step)—多集群通信
285 0
Linkerd 2.10(Step by Step)—多集群通信
|
存储 Kubernetes API
Linkerd 2.10(Step by Step)—将 GitOps 与 Linkerd 和 Argo CD 结合使用
Linkerd 2.10(Step by Step)—将 GitOps 与 Linkerd 和 Argo CD 结合使用
662 0
Linkerd 2.10(Step by Step)—将 GitOps 与 Linkerd 和 Argo CD 结合使用
|
存储 数据可视化 应用服务中间件
Linkerd 2.10(Step by Step)—使用 Linkerd 进行分布式跟踪
Linkerd 2.10(Step by Step)—使用 Linkerd 进行分布式跟踪
254 0
Linkerd 2.10(Step by Step)—使用 Linkerd 进行分布式跟踪
|
JSON Prometheus Kubernetes
Linkerd 2.10(Step by Step)—使用每个路由指标调试 HTTP 应用程序
Linkerd 2.10(Step by Step)—使用每个路由指标调试 HTTP 应用程序
151 0
Linkerd 2.10(Step by Step)—使用每个路由指标调试 HTTP 应用程序
|
Kubernetes API 容器
Linkerd 2.10(Step by Step)—使用请求跟踪调试 gRPC 应用程序
Linkerd 2.10(Step by Step)—使用请求跟踪调试 gRPC 应用程序
158 0
Linkerd 2.10(Step by Step)—使用请求跟踪调试 gRPC 应用程序
Linkerd 2.10(Step by Step)—使用 Kustomize 自定义 Linkerd 的配置
Linkerd 2.10(Step by Step)—使用 Kustomize 自定义 Linkerd 的配置
161 0
|
Kubernetes Docker 容器
Linkerd 2.10(Step by Step)—安装 Linkerd
Linkerd 2.10(Step by Step)—安装 Linkerd
360 0
|
Kubernetes 关系型数据库 MySQL
Linkerd 2.10(Step by Step)—1. 将您的服务添加到 Linkerd
Linkerd 2.10(Step by Step)—1. 将您的服务添加到 Linkerd
161 0
|
Kubernetes 负载均衡 网络协议
Linkerd 2.10(Step by Step)—Ingress 流量
Linkerd 2.10(Step by Step)—Ingress 流量
202 0

热门文章

最新文章

相关实验场景

更多
下一篇
开通oss服务