Openshift-Service不仅仅能负载Pod,它还能负载VM等外部服务
- Service是Openshift最核心的概念,它可以为一组具有相同功能的Pod提供一个统一的入口,并且将请求负载均衡分发到后端的各个Pod应用上。同时Service在集群下的IP是不变的,保证了请求的可靠性。
- Service仅仅只能负载一组Pod吗?No。它还可以对接VM的服务,甚至是物理机的服务。
Service负载Pod
1
2
3
4
5
6
7
8
9
10
11
12
13
14apiVersion: v1
kind: Service
metadata:
name: nginx
spec:
selector:
app: nginx
type: NodePort
ports:
- port: 8080
name: nginx
protocol: TCP
targetPort: 8080
nodePort: 38080 - selector:Label选择器,将选择指定Label的Pod作为被负载Pod
- type:Service的类型,指定Service的访问方式,默认为ClusterIP。
- ClusterIP:虚拟的服务IP地址,该IP可以被集群下的Pod访问
- NodePort:使用宿主机的端口,通过访问任意Node的对应端口,就能访问Service的端口
- LoadBalancer:使用外部负载均衡器完成到服务的负载分发,需要在.spec.status.loadBalancer指定外部负载均衡器的IP地址,同时定义nodePort和clusterIP。
- port:Service监听的端口号
- targetPort:需要转发到后端Pod的端口号
- nodePort:当type=NodePort时,指定映射到物理机的端口(范围30000-32767)
Service负载集群外部Service(可以是VM,物理机等)
- 创建一个无Label Selector的Service(即无法选择后端的Pod,系统不会自动创建Endpoint,需要手动创建Endpoint)
1
2
3
4
5
6
7
8
9
10
11apiVersion: v1
kind: Service
metadata:
name: nginx-out
spec:
ports:
- port: 80
name: nginx-out
protocol: TCP
targetPort: 8080
type: ClusterIP - 创建Endpoint指向后端服务(该Endpoint的name必须与Service的name相同)集群中的pod访问Service nginx-out:80,请求最终会被指向192.168.0.6:8080。
1
2
3
4
5
6
7
8
9kind: Endpoints
apiVersion: v1
metadata:
name: nginx-out
subsets:
- addresses:
- ip: 192.168.0.6
ports:
- port: 8080
实战:将外部的Jenkins用Openshift的Service接管,并创建Route来访问Jenkins服务
- Jenkins服务:
192.168.0.6:8080
- route的Hostname:
jenkins.apps.openshift.com
- 创建project jenkins
1
oc new-project jenkins
- 创建jenkinsvm Service
1
2
3
4
5
6
7
8
9
10
11apiVersion: v1
kind: Service
metadata:
name: jenkinsvm
spec:
ports:
- port: 8080
name: jenkinsvm
protocol: TCP
targetPort: 8080
type: ClusterIP - 创建Endpoints
1
2
3
4
5
6
7
8
9kind: Endpoints
apiVersion: v1
metadata:
name: nginx-out
subsets:
- addresses:
- ip: 192.168.0.6
ports:
- port: 8080 - 创建Route
1
2
3
4
5
6
7
8
9
10
11
12apiVersion: v1
kind: Route
metadata:
name: jenkins
spec:
host: jenkins.apps.openshift.com
port:
targetPort: jenkinsvm
to:
kind: Service
name: jenkinsvm
weight: 100
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Michael Blog!
评论