在编排kubernetes时,Deployment、ReplicationController的Pod项有containerPort,Service文件里的port,targetPort, nodePort
Deployment、ReplicationController中的
containerPort
:容器暴露的端口
Service中的
port:service暴露在cluster ip上的端口,通过
targetPort:提供该服务的容器所暴露(EXPOSE)的端口号,没有指定targetPort,则默认targetPort与port相同
nodePort:节点端口,nodePort
的范围是30000-32767
。
可以通过修改apiserver
的--service-node-port-range
的参数来修改默认范围,如:--service-node-port-range 8000-9000
1. 创建 frontend-rc.yaml ,执行 kubectl apply -f frontend-rc.yaml
apiVersion: v1
kind: ReplicationController
metadata:
name: frontend
spec:
replicas: 1
selector:
tier: frontend
template:
metadata:
labels:
app: app-demo
tier: frontend
spec:
containers:
- name: tomcat-demo
image: tomcat
imagePullPolicy: IfNotPresent
env:
- name: GET_HOSTS_FROM
value: dns
ports:
- containerPort: 8080
- name: nginx-demo
image: nginx
imagePullPolicy: IfNotPresent
env:
- name: GET_HOSTS_FROM
value: dns
ports:
- containerPort: 80
2. 创建 frontend-service.yaml: 执行 kubectl apply -f frontend-service.yaml
apiVersion: v1
kind: Service
metadata:
name: frontend
labels:
name: frontend
spec:
ports:
- port: 8080
targetPort: 80 # nginx容器曝露的端口
nodePort: 30000
selector:
tier: frontend
type: NodePort # 使用NodePort向k8s集群外部暴露服务
3. 查看dashboard
4. 访问
运行 kubectl describe pod frontend-s4kd7 查看当前节点的IP地址为10.1.0.62
运行kubectl exec -it frontend-s4kd7 -c nginx-demo /bin/bash ,登录nginx-demo容器
运行 curl http://10.1.0.62:8080 #10.1.0.62 为节点 IP地址,访问Tomcat容器
运行 curl http://10.1.0.62:80 # 10.1.0.62 为节点 IP地址,访问Nginx容器
运行 curl http://10.104.109.187:8080 #10.104.109.187 为Cluster IP地址
ifconfig查看本机IP地址为 192.168.10.7
在浏览器输入http://192.168.10.7:30000/ # 30000为nodePort曝露出来的端口