kubernetes ClusterIP 服务如何能在没有任何 Ingresses 的情况下发布到主机外部 IP 上?

kubernetes ClusterIP 服务如何能在没有任何 Ingresses 的情况下发布到主机外部 IP 上?

我最近使用 kubeadm 重新安装了 kubernetes 集群,并在尝试一些 helm 图表时遇到了一些我无法理解的奇怪行为。

ClusterIP 服务应该只能从集群访问,到目前为止,所有服务都以这种方式工作。但是尝试kube-prometheus从 bitnami 中,我最终得到了一些 ClusterIP 服务,它们以某种方式劫持了主机 IP 并公开暴露。没想到没有任何 Ingress/NodePort/等就可能实现。

实际的服务如下:

kind: Service
apiVersion: v1
metadata:
  name: kube-prometheus-node-exporter
  namespace: kube-prometheus
  selfLink: /api/v1/namespaces/kube-prometheus/services/kube-prometheus-node-exporter
  uid: 0c4cd5a1-4849-4635-a656-238a5c3b4b78
  resourceVersion: '20388'
  creationTimestamp: '2020-09-08T18:08:17Z'
  labels:
    app.kubernetes.io/instance: kube-prometheus
    app.kubernetes.io/managed-by: Helm
    app.kubernetes.io/name: node-exporter
    app.kubernetes.io/version: 1.0.1
    helm.sh/chart: node-exporter-1.1.0
    jobLabel: node-exporter
  annotations:
    meta.helm.sh/release-name: kube-prometheus
    meta.helm.sh/release-namespace: kube-prometheus
    prometheus.io/scrape: 'true'
  managedFields:
    - manager: Go-http-client
      operation: Update
      apiVersion: v1
      time: '2020-09-08T18:08:17Z'
      fieldsType: FieldsV1
      fieldsV1:
        'f:metadata':
          'f:annotations':
            .: {}
            'f:meta.helm.sh/release-name': {}
            'f:meta.helm.sh/release-namespace': {}
            'f:prometheus.io/scrape': {}
          'f:labels':
            .: {}
            'f:app.kubernetes.io/instance': {}
            'f:app.kubernetes.io/managed-by': {}
            'f:app.kubernetes.io/name': {}
            'f:app.kubernetes.io/version': {}
            'f:helm.sh/chart': {}
            'f:jobLabel': {}
        'f:spec':
          'f:ports':
            .: {}
            'k:{"port":9100,"protocol":"TCP"}':
              .: {}
              'f:name': {}
              'f:port': {}
              'f:protocol': {}
              'f:targetPort': {}
          'f:selector':
            .: {}
            'f:app.kubernetes.io/instance': {}
            'f:app.kubernetes.io/name': {}
          'f:sessionAffinity': {}
          'f:type': {}
spec:
  ports:
    - name: metrics
      protocol: TCP
      port: 9100
      targetPort: metrics
  selector:
    app.kubernetes.io/instance: kube-prometheus
    app.kubernetes.io/name: node-exporter
  clusterIP: 10.107.104.65
  type: ClusterIP
  sessionAffinity: None
status:
  loadBalancer: {}

没有什么特别之处可以解释为什么这个文件最终会公开(例如可以使用主机 IP 进行访问:http://xx.yy.150.105:9100/metrics)。

知道我可能错过了什么吗?

相关内容