【kubernetes笔记】k8s_service(07)
Page content
这一篇整理了service相关的内容。
1.Service的作用
- 防止Pod失联,当Pod启动后往Service里注册服务。
- 定义一组Pod访问策略(负载均衡)。
2.Service和Pod的关系
根据label和selector标签建立联系
3.常用的Service类型
- ClusterIp:集群内部使用
- NodePort:对外访问应用使用
- LoadBalancer: 对外访问应用使用,公有云
内部网部署应用,外网一般不能访问到的
4.简单例子
Service代理携带app=hostnames标签的Pod。
这个Service的80端口,代理的是Pod的9376端口。
apiVersion: v1
kind: Service
metadata:
name: hostnames
spec:
selector:
app: hostnames
ports:
- name: default
protocol: TCP
port: 80
targetPort: 9376
应用
apiVersion: apps/v1
kind: Deployment
metadata:
name: hostnames
spec:
selector:
matchLabels:
app: hostnames
replicas: 3
template:
metadata:
labels:
app: hostnames
spec:
containers:
- name: hostnames
image: k8s.gcr.io/serve_hostname
ports:
- containerPort: 9376
protocol: TCP
查看部署情况
$ kubectl get endpoints hostnames
NAME ENDPOINTS
hostnames 10.244.0.5:9376,10.244.0.6:9376,10.244.0.7:9376
5.NodePort
apiVersion: v1
kind: Service
metadata:
name: my-nginx
labels:
run: my-nginx
spec:
type: NodePort
ports:
- nodePort: 8080
targetPort: 80
protocol: TCP
name: http
- nodePort: 443
protocol: TCP
name: https
selector:
run: my-nginx
<宿主机的IP地址>:8080
能访问 => 某一个被代理的 Pod 的 80 端口
6.LoadBalancer
kind: Service
apiVersion: v1
metadata:
name: example-service
spec:
ports:
- port: 8765
targetPort: 9376
selector:
app: example
type: LoadBalancer
7.ExternalName
kind: Service
apiVersion: v1
metadata:
name: my-service
spec:
type: ExternalName
externalName: my.database.example.com
8.分配公有IP
kind: Service
apiVersion: v1
metadata:
name: my-service
spec:
selector:
app: MyApp
ports:
- name: http
protocol: TCP
port: 80
targetPort: 9376
externalIPs:
- 80.11.12.10
欢迎大家的意见和交流
email: li_mingxie@163.com