我创建了2个吊舱。一个是格拉法纳,另一个是潮豆荚。我需要在grafana中配置Influx。我确实看到了以下示例。我对其配置方式感到困惑。下面是部署和服务文件。
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: influxdb
labels:
app: influxdb
spec:
template:
metadata:
labels:
app: influxdb
spec:
containers:
- name: influxdb
image: influxdb
ports:
- containerPort: 8083
name: admin
- containerPort: 8086
name: http
resources:
limits:
memory: 2048Mi
cpu: 100m
volumeMounts:
- name: influxdb-data
mountPath: /var/lib/influxdb
volumes:
- name: influxdb-data
persistentVolumeClaim:
claimName: influxdb-pvc-vol
服务文件
apiVersion: v1
kind: Service
metadata:
name: influxdb
labels:
app: influxdb
spec:
ports:
- port: 3306
selector:
app: influxdb
clusterIP: None
clusterIP: None
的作用是什么?他已经公开了3306端口并将其映射到节点端口3306。所以我相信我可以使用3306端口及其IP从其他Pod进行访问。但是在这里我看到我可以通过http://influxdb:8086
进行访问吗?
答案 0 :(得分:1)
我可以解释正在发生的事情以及为什么这样做,但是我仍然认为这种配置没有意义。
部署会创建一个运行InfluxDB的Pod,默认情况下,该Pod会在端口8086上进行侦听。此处的containerPort
仅是参考信息,请参见Pod spec reference中的以下内容:
主要是参考性的。在此处未指定端口并不能防止该端口暴露。任何通过容器内的默认“ 0.0.0.0”地址侦听的端口都可以从网络访问。
现在是使用端口3306创建的服务,这很奇怪,但在这种情况下并不重要,因为这是Headless Service。无头服务是一种告诉Kubernetes您不希望它具有精美的网络功能(例如kube-proxy负载平衡)的方法,而只是希望它为您创建DNS记录。通过指定ClusterIP: None
,您实际上可以使此服务变得毫无头绪。鉴于该服务实际上并没有为任何流量提供服务,因此此处的“端口”字段毫无意义。
现在,让我们回顾一下访问http://influxdb:8086时会发生什么:
influxdb
解析为Pod IP。多亏了无头服务,这才有可能。再次注意,主机解析为Pod IP,而不是服务IP。答案 1 :(得分:0)
定义ClusterIP:none的服务称为headless service
对于定义选择器的无头服务,端点控制器在API中创建端点记录,并修改DNS配置以返回直接指向支持该服务的Pod的A记录(地址)
由于只有一个influxdb Pod,因此不需要对其进行负载平衡,因此也不需要服务代理,因此请求将直接路由到Pod。