在集群内公开入口路径但不公开?

问题描述 投票:0回答:4

我有一个包含以下图表的pod:

ingress:
  enabled: true
  annotations:
    kubernetes.io/ingress.class: nginx
    // ...
  paths:
    - /api/myservice

我的pod暴露了api和另外一个/prometheus端点,可以通过/api/myservice/prometheus访问。

我想在我的群集中看到prometheus,但不是来自/api/myservice/prometheus。我怎么能做到这一点?

kubernetes kubernetes-helm kubernetes-ingress nginx-ingress
4个回答
2
投票

如果你只是需要内部访问,我认为你不应该把它放入入口。您可以将DNS Service与Kubernetes集群一起使用。

如果您的prometheus服务运行与工作窗格相同的命名空间,则可以使用以下地址来访问它。

http://prometheus-svc-name

如果您的prometheus服务在不同的命名空间中运行,您可以使用:

http://prometheus-svc-name.prometheus-namespace.svc.cluster.local

访问该服务。

更新:

评论后更清楚问题。

您可以编写另一条规则来隐藏您的/prometheus端点,如下所示:

ingress:
  enabled: true
  annotations:
    kubernetes.io/ingress.class: nginx
    // ...
  paths:
    - /api/myservice => myservice
    - /api/myservice/prometheus => 404 default backend.

nginx-ingress将首先匹配最长的路由。它将把/api/myservice/prometheus路由到404.See this documentation


2
投票

您可以添加将端点重定向到default-backend的Ingress规则:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: block
  annotations:
    ingress.kubernetes.io/ssl-redirect: "true"
    ingress.kubernetes.io/rewrite-target: /
spec:
  tls:
  - hosts:
    - myapp.to
  rules:
  - host: myapp.to
    http:
      paths:
      - path: /metrics
        backend:
          serviceName: ingress-default-backend
          servicePort: 8080

0
投票

实现此目的的最佳方法是从入口删除prometheus端点,如果您知道prometheus支持使用服务上的注释进行自动发现,请将prometheus配置为k8s自动发现,然后在服务yaml文件中添加注释。 https://prometheus.io/docs/prometheus/latest/configuration/configuration/#kubernetes_sd_config


0
投票

将端点更改为指向您的API。 / api / myservice / my-api或使用app-root注释,指向/ api / myservice中的api:

nginx.ingress.kubernetes.io/app-root: /path/to/my/app/root/dir

更多细节:https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/#rewrite

© www.soinside.com 2019 - 2024. All rights reserved.