You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为prometheus-rancher-monitoring-prometheus配置HostPort实现外部节点访问

集群外访问Rancher监控Prometheus的可行方案

1. NodePort Service(推荐,稳定不易被覆盖)

直接修改StatefulSet的hostPort大概率会被Rancher监控Operator还原,最稳妥的方式是创建NodePort Service暴露端口:

  • 编写配置文件prometheus-nodeport.yaml:
apiVersion: v1
kind: Service
metadata:
  name: prometheus-rancher-monitoring-nodeport
  namespace: cattle-monitoring-system
spec:
  type: NodePort
  selector:
    app.kubernetes.io/name: prometheus
    app.kubernetes.io/instance: rancher-monitoring
    app.kubernetes.io/component: prometheus
  ports:
    - port: 9090
      targetPort: 9090
      nodePort: 30090 # 可选,指定30000-32767范围内的端口,不填会自动分配
  • 执行部署命令:kubectl apply -f prometheus-nodeport.yaml
  • 集群外访问:http://<集群任意节点IP>:<分配的nodePort>

2. Ingress(适合已有Ingress Controller的场景)

如果集群已部署Ingress Controller(比如Nginx Ingress),可以通过域名访问:

  • 编写Ingress配置文件prometheus-ingress.yaml:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: prometheus-rancher-monitoring-ingress
  namespace: cattle-monitoring-system
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: "false" # 按需开启HTTPS
spec:
  rules:
    - host: prometheus.your-domain.com # 替换成你的自定义域名
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: prometheus-rancher-monitoring-prometheus # 监控默认Service名称
                port:
                  number: 9090
  • 部署命令:kubectl apply -f prometheus-ingress.yaml
  • 访问:将域名解析到Ingress节点IP,然后通过http://prometheus.your-domain.com访问

3. 修复hostPort不生效问题(不推荐,易被覆盖)

如果坚持使用hostPort,需要解决Operator覆盖和端口冲突问题:

  • 不要手动修改StatefulSet,直接在Rancher UI中修改监控的Helm配置:
    1. 进入集群 → 应用市场 → 已安装的应用,找到rancher-monitoring
    2. 点击编辑配置,找到prometheus.prometheusSpec.hostPort,设置为9090
    3. 保存后Operator会自动更新StatefulSet
  • 检查节点端口:执行ss -tulpn | grep 9090,确认9090未被其他进程占用,否则更换端口
  • 检查节点防火墙:放行9090端口,确保集群外能访问
  • 检查网络策略:执行kubectl get networkpolicy -n cattle-monitoring-system,如果有策略阻止外部访问,需调整规则

4. LoadBalancer Service(云环境专属)

如果是云厂商托管的K8S集群,直接创建LoadBalancer Service获取外部IP:

apiVersion: v1
kind: Service
metadata:
  name: prometheus-rancher-monitoring-loadbalancer
  namespace: cattle-monitoring-system
spec:
  type: LoadBalancer
  selector:
    app.kubernetes.io/name: prometheus
    app.kubernetes.io/instance: rancher-monitoring
    app.kubernetes.io/component: prometheus
  ports:
    - port: 9090
      targetPort: 9090
  • 部署后云厂商会分配外部IP,直接通过http://<外部IP>:9090访问

内容的提问来源于stack exchange,提问作者ramesh k

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 19:42:21