在工作时碰到一个场景,K8S中的容器需要访问外部的 es 服务和 kibana, 若把 es 和 kibana 的配置以固定IP的形式写入配置文件中,万一 es 和 kibana 搬迁,ip 地址变更那改起来会非常不灵活和容易遗漏。
这时我们可以使用 K8S 的 service。
访问 ES
外部的 es ip为 192.168.0.200 端口为 9400;这里创建一个 Endpoints 和 Service。
cat es.yaml
apiVersion: v1
kind: Service
metadata:
name: es-svc
namespace: klvchen
spec:
ports:
- port: 9400
targetPort: 9400
protocol: TCP
name: tcp
---
apiVersion: v1
kind: Endpoints
metadata:
name: es-svc
namespace: klvchen
subsets:
- addresses:
- ip: 192.168.0.200
ports:
- port: 9400
name: tcp
# 在 K8S 中的容器使用 es-svc.klvchen.svc.cluster.local:9400 就可以访问到 es 了。
访问 Kibana
通过 ingress 管理 Kibana,让用户通过 kibana.klvchen.com 这个域名来访问 192.168.0.200 上的 kibana。
注意:kibana.klvchen.com 域名需要解析到 ingress 上
cat kibana.yaml
apiVersion: v1
kind: Service
metadata:
name: kibana-svc
namespace: klvchen
spec:
ports:
- port: 5601
targetPort: 5601
protocol: TCP
name: http
---
apiVersion: v1
kind: Endpoints
metadata:
name: kibana-svc
namespace: klvchen
subsets:
- addresses:
- ip: 192.168.0.200
ports:
- port: 5601
name: http
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: kibana
namespace: klvchen
spec:
rules:
- host: kibana.klvchen.com
http:
paths:
- path: /
backend:
serviceName: kibana-svc
servicePort: http