0.简介
本篇文章介绍如何使用Kubernetes代理集群外部服务,使得集群内运行的应用程序能够访问集群外部组件。
例如,Kubernetes集群内部运行了一个Grafana,该Grafana需要将一个运行在非集群节点上的Prometheus作为数据源。该场景可以使用本文所述方法。
需要用到的Kubernetes资源包括:Endpoints、Service、以及Ingress。
测试环境:
OS version: CentOS Linux release 7.9.2009
Kubernetes version: v1.23.6
1.创建Service
参考以下代码编辑yaml文件。
[ops@127.0.0.1]$ vim prometheus-federation-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: prometheus-federation-service
namespace: devops-tools
spec:
ports:
- port: 9528
targetPort: 9090
protocol: TCP
编辑完成后,创建Service
kubectl apply -f prometheus-federation-svc.yaml
2.创建Endpoints
参考以下代码编辑yaml文件。
[ops@127.0.0.1]$ vim prometheus-federation-ep.yaml
apiVersion: v1
kind: Endpoints
metadata:
name: prometheus-federation-service
namespace: devops-tools
subsets:
- addresses:
- ip: 127.0.0.1 #外部服务所监听的IP地址
ports:
- port: 9090 #外部服务的监听端口
protocol: TCP #外部服务使用的传输协议
Endpoints的name必须和Service的name一致,必须在同一个命名空间中,Kubernetes根据Endpoints和Service的name字段来绑定两个资源。
编辑完成后,创建Endpoints。
kubectl apply -f prometheus-federation-ep.yaml
3. 创建Ingress
参考以下代码编辑yaml文件。
[ops@127.0.0.1]$ vim prometheus-federation-ing.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
meta.helm.sh/release-name: prometheus-global
meta.helm.sh/release-namespace: devops-tools
name: prometheus-federation
namespace: devops-tools
spec:
rules:
- host: prometheus-federation.yourip.nip.io
http:
paths:
- backend:
service:
name: prometheus-federation-service
port:
number: 9528
path: /
pathType: Prefix
编辑完成后,创建Endpoints。
kubectl apply -f Prometheus-federation-ing.yaml
4.验证
创建完Service、Endpoints、Ingress后,预期集群中的资源信息如下:

使用curl命令验证是否代理成功。预期输出结果如下。
2319

被折叠的 条评论
为什么被折叠?



