# 外部服务映射

集群内应用调用外部服务

# 外部域名映射到内部Service

apiVersion: v1
kind: Service
metadata:
  name: mysql
spec:
  externalName: mysql.xxxx.com
  type: ExternalName
1
2
3
4
5
6
7

同一空间的pod可通过mysql:3306访问外部mysql服务

注意:

  1. externalName填写IP,不会被Ingress和CoreDNS解析(KubeDNS支持)
  2. 外部服务又经过代理转发,比如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

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

# 总结

ExternalName和Headless Service没有中间层代理,通过DNS劫持实现

端口变更经过内部Kube-Proxy层转发,可能会带来性能损耗

上次更新: : 2 months ago