Kubernetes 访问内网集群外独立的服务,由于不在相同的网段(容器内的网段是独立的)所以不能够互相访问通信,这种情况下我们可以创建 Kubernetes 的 Endpoints 资源,将外部服务映射为集群的内部服务进行访问通信。
在实际的生产环境使用中,通过分布式存储来实现的磁盘在 Mysql 这种IO密集性应用中,性能问题会显得非常突出。所以在实际应用中,一般不会把 Mysql 这种应用直接放入 Kubernetes 中管理,而是使用专用的服务器来独立部署,而像 Web 这种无状态应用依然会运行在 Kubernetes 中,这个时候 Web 服务器要连接 Kubernetes 集群外的数据库,有两种方式:
下面分别列举 Elasticsearch、Mysql、PostgreSQL、Redis、Nginx 的 Endpoints 配置方法,希望大家能通过这几个示例学习到 Endpoints 的使用方法。
1、Elasticsearch 配置
Elasticsearch EndPoints 资源文件,内容如下:
apiVersion: v1
kind: Endpoints
metadata:
name: elasticsearch
namespace: oas-dev
subsets:
- addresses:
- ip: 10.12.1.203
ports:
- name: es01
port: 9500
- name: es02
port: 9501
- name: es03
port: 9502
Elasticsearch Service 资源文件,内容如下:
apiVersion: v1
kind: Service
metadata:
name: elasticsearch
namespace: oas-dev
spec:
type: NodePort
clusterIP: 10.110.181.25
ports:
- name: es01
port: 9500
targetPort: 9500
protocol: TCP
- name: es02
port: 9501
targetPort: 9501
protocol: TCP
- name: es03
port: 9502
targetPort: 9502
protocol: TCP
注:上述 10.12.1.203 是 Elasticsearch 物理服务器所在内网 IP 地址。
2、Mysql 配置
Mysql EndPoints 资源文件,内容如下:
apiVersion: v1
kind: Endpoints
metadata:
name: mysql
namespace: oas-dev
subsets:
- addresses:
- ip: 10.12.1.203
ports:
- port: 3306
Mysql Service 资源文件,内容如下:
apiVersion: v1
kind: Service
metadata:
name: mysql
namespace: oas-dev
spec:
type: NodePort
clusterIP: 10.100.169.39
ports:
- port: 3306
targetPort: 3306
nodePort: 31500
protocol: TCP
注:上述 10.12.1.203 是 Mysql 物理服务器所在内网 IP 地址。
3、PostgreSQL 配置
PostgreSQL EndPoints 资源文件,内容如下:
apiVersion: v1
kind: Endpoints
metadata:
name: pgsql
namespace: oas-dev
subsets:
- addresses:
- ip: 10.12.1.203
ports:
- port: 5432
PostgreSQL Service 资源文件,内容如下:
apiVersion: v1
kind: Service
metadata:
name: pgsql
namespace: oas-dev
spec:
type: NodePort
clusterIP: 10.109.241.188
ports:
- port: 5432
targetPort: 5432
nodePort: 31532
protocol: TCP
注:上述 10.12.1.203 是 PostgreSQL 物理服务器所在内网 IP 地址。
4、Redis 配置
Redis EndPoints 资源文件,内容如下:
apiVersion: v1
kind: Endpoints
metadata:
name: redis
namespace: oas-dev
subsets:
- addresses:
- ip: 10.12.1.203
ports:
- port: 6379
Redis Service 资源文件,内容如下:
apiVersion: v1
kind: Service
metadata:
name: redis
namespace: oas-dev
spec:
type: NodePort
clusterIP: 10.102.65.3
ports:
- port: 6379
targetPort: 6379
protocol: TCP
注:上述 10.12.1.203 是 Redis 物理服务器所在内网 IP 地址。
5、Nginx 配置
Nginx EndPoints 资源文件,内容如下:
apiVersion: v1
kind: Endpoints
metadata:
name: nginx
namespace: oas-dev
subsets:
- addresses:
- ip: 10.12.1.206
ports:
- port: 9527
Nginx Service 资源文件,内容如下:
apiVersion: v1
kind: Service
metadata:
name: nginx
namespace: oas-dev
spec:
type: NodePort
clusterIP: 10.98.31.206
ports:
- port: 9527
targetPort: 9527
protocol: TCP
注:上述 10.12.1.206 是 Nginx 物理服务器所在内网 IP 地址。
到此集群访问外部服务(Endpoints)介绍完成。