首先建一个Deployment:
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: httpd
spec:
replicas: 3
template:
metadata:
labels: #设置一个标签 以下创建service的时候将使用这个标签
run: httpd
spec:
containers:
- name: httpd
image: httpd
ports:
- containerPort: 80
创建service:
apiVersion: v1 #v1是Service的 apiVersion
kind: Service #类型为Service
metadata:
name: httpd-svc #service名字为 httpd-svc
spec:
selector: #指明挑选label标签为 run:httpd 的pod作为service的后端
run: httpd
ports: #将service的8080端口映射到pod的80端口, 使用tcp协议
- protocol: TCP
port: 8080 #集群内部端口
targetPort: 80 #pod端口
port
即,这里的port表示:service暴露在cluster ip上的端口,<cluster ip>:port 是提供给集群内部客户访问service的入口
nodePort
首先,nodePort是kubernetes提供给集群外部客户访问service入口的一种方式(另一种方式是LoadBalancer),所以,<nodeIP>:nodePort 是提供给集群外部客户访问service的入口。
targetPort
targetPort很好理解,targetPort是pod上的端口,从port和nodePort上到来的数据最终经过kube-proxy流入到后端pod的targetPort上进入容器。
查看service:
kubectl get service
kubectl describe service httpd