# 外部服务映射
集群内应用调用外部服务
# 外部域名映射到内部Service
apiVersion: v1
kind: Service
metadata:
name: mysql
spec:
externalName: mysql.xxxx.com
type: ExternalName
1
2
3
4
5
6
7
2
3
4
5
6
7
同一空间的pod可通过mysql:3306
访问外部mysql服务
注意:
- externalName填写IP,不会被Ingress和CoreDNS解析(KubeDNS支持)
- 外部服务又经过代理转发,比如nginx,需要配置server_name,否则映射无效
# 外部IP映射内部Service
# IP映射
使用Headless Service实现映射
apiVersion: v1
kind: Service
metadata:
name: mysql
spec:
clusterIP: None
type: ClusterIP
---
apiVersion: v1
kind: Endpoints
metadata:
name: mysql
subsets:
- addresses:
- ip: 192.168.1.1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Service不指定Selector,手动维护和创建endpoint,创建后可通过mysql:3306
访问192.168.1.1:3306
服务,Headless Service不能修改端口
# IP + 端口映射
要改变外部服务端口
apiVersion: v1
kind: Service
metadata:
name: mysql
spec:
type: ClusterIP
ports:
- port: 3306
targetPort: 3308
---
apiVersion: v1
kind: Endpoints
metadata:
name: mysql
subsets:
- addresses:
- ip: 192.168.1.1
ports:
- port: 3308
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 总结
ExternalName和Headless Service没有中间层代理,通过DNS劫持实现
端口变更经过内部Kube-Proxy层转发,可能会带来性能损耗