service + endpoints + ingress实现内部ip:port服务对外访问

意义

在k8s集群中,需要访问集群外部的一些服务且服务是ip:port形式暴露的,可以使用类型为ClusterIP的Kubernetes Service和Endpoint及Ingress实现对外部服务的访问。好处如下:

  1. 纳入k8s资源后,可以通过ingress便捷配置域名和证书。
  2. 通过ingress配置同域名不同路径实现跨域访问。

实现

比如我们有一个web服务:http://192.168.32.10:8080。

可通过如下配置,实现外部域名安全访问。

---
apiVersion: v1
kind: Service
metadata:
  name: web-agent-svc
spec:
  ports:
  - name: web-agent-port # 需要和Endpoints中name保持一致
    port: 18080 # 可自定义指定
    protocol: TCP
  sessionAffinity: None
  type: ClusterIP 

---
apiVersion: v1
kind: Endpoints
metadata:
  name: web-agent-svc
subsets:
- addresses:
  - ip: 192.168.32.10
  ports:
  - port: 8080 # web服务端口
    name: web-agent-port
    protocol: TCP
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: web-agent-svc-ingress
  annotations:
    kubernetes.io/ingress.class: 'nginx'
    nginx.ingress.kubernetes.io/rewrite-target: /$1 # $1代指ingress path中(.*)部分

spec:
  tls:
    - hosts:
        - web.wfbi.net
      secretName: web.wfbi.net-https # 需要创建tls证书
  rules:
    - host: web.wfbi.net
      http:
        paths:
          - backend:
              service:
                name: web-agent-svc
                port:
                  number: 18080
            pathType: Prefix
            path: /(.*)

如上配置后可通过:https://web.wfbi.net域名访问

<think>嗯,用户想了解Prometheus在Kubernetes中的服务发现机制,以及Node、Service、Pod、EndpointsIngress在不同场景下的使用方式。首先,我需要回忆一下Prometheus的服务发现机制在K8s中的工作原理。Prometheus主要通过配置kubernetes_sd_configs来发现各种K8s资源,比如节点、服务、Pod等。 然后,用户提到的各个资源对象:Node、Service、Pod、EndpointsIngress,每个都有不同的使用场景。比如,Node级别的发现可能用于监控节点本身的指标,而Pod发现则适合获取每个容器的实时数据。Endpoints对应的是Service背后的实际Pod IP和端口,这在监控具体服务实例时很重要。 接下来要考虑这些资源在Prometheus中的配置方式。比如,当使用Service发现时,Prometheus会获取Service的ClusterIP和端口,但如果是ClusterIP类型的服务,可能需要通过Relabeling来替换成Pod的端口。另外,Endpoints的发现可以直接获取到Pod的IP,适合直接抓取指标。 还有Ingress的发现,可能用于监控入口流量,或者生成基于Ingress路径的监控指标。这时候需要结合annotations或者特定的标签来过滤目标。 用户可能还关心实际应用中的例子,比如如何配置Prometheus的job来发现不同的资源类型,以及Relabeling的作用,比如保留或替换某些标签,以便于在Prometheus中正确识别目标。 需要确保回答覆盖每个资源类型的服务发现配置、适用场景,以及可能需要注意的问题,比如权限配置、Relabeling策略等。同时,结合用户提供的引用内容,虽然主要是关于IngressService的,但可以关联到EndpointsService的关系,说明Service如何跟踪Pod的变化,更新Endpoints,这对Prometheus发现具体实例很重要。 最后,用户可能需要一些示例配置来更好地理解,比如Pod发现的job配置,或者如何通过Endpoints来监控具体的服务端口。此外,常见问题如权限不足导致无法发现资源,或者Relabeling配置错误导致目标丢失,这些也应该提及。</think>### Prometheus在Kubernetes中的服务发现机制详解 #### 一、服务发现机制核心原理 Prometheus通过`kubernetes_sd_configs`配置实现Kubernetes资源自动发现,支持发现以下5类资源: 1. **Node**:监控节点级别指标(如CPU/内存使用率) 2. **Service**:发现服务端点(ClusterIP/NodePort) 3. **Pod**:直接获取容器暴露的指标端口 4. **Endpoints**:跟踪Service背后真实Pod实例变化[^1] 5. **Ingress**:监控入口流量规则和路径配置[^3] $$监控目标发现过程 = 资源发现 \rightarrow 标签提取 \rightarrow Relabel配置 \rightarrow 最终目标列表$$ #### 二、不同资源类型的配置与场景 | 发现类型 | 适用场景 | 配置示例 | 特点说明 | |------------|-----------------------------------|-----------------------------------|------------------------------| | **Node** | 节点监控 | `role: node` | 需搭配kubelet metrics接口 | | **Service**| 服务级聚合监控 | `role: service` | 自动发现ClusterIP/NodePort | | **Pod** | 容器实时指标采集 | `role: pod` | 需标注`prometheus.io/scrape` | | **Endpoints**| 精确到实例的监控 | `role: endpoints` | 直接获取Pod IP:Port | | **Ingress**| 入口流量监控 | `role: ingress` | 关联后端服务路径规则[^3] | #### 三、关键配置示例 **Pod发现配置**(监控所有带注解的Pod): ```yaml - job_name: 'pods' kubernetes_sd_configs: - role: pod relabel_configs: - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape] action: keep regex: true - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path] target_label: __metrics_path__ ``` **Endpoints发现场景**(监控MySQL服务): ```yaml - job_name: 'mysql-endpoints' kubernetes_sd_configs: - role: endpoints relabel_configs: - source_labels: [__meta_kubernetes_service_label_app] regex: mysql action: keep ``` #### 四、服务发现流程 1. 通过Kubernetes API实时获取资源状态 2. 自动识别资源标签和注解(如`prometheus.io/port`) 3. 使用Relabeling进行目标过滤和元数据加工 4. 生成最终监控目标列表 #### 五、常见问题解决方案 1. **权限不足**:确保ServiceAccount具有`nodes/services/pods`的list/watch权限 2. **目标丢失**:检查Relabel配置是否过度过滤 3. **端口映射错误**:使用`__meta_kubernetes_pod_container_port_number`重写端口 4. **Ingress路径匹配**:通过`__meta_kubernetes_ingress_path`提取路由规则[^3]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值