在編排kubernetes時,Deployment、ReplicationController的Pod項有containerPort,Service文件裏的port,targetPort, nodePort
Deployment、ReplicationController中的
containerPort
:容器暴露的端口
Service中的
port:service暴露在cluster ip上的端口,通過<cluster ip>:port訪問服務,通過此端口集羣內的服務可以相互訪問
targetPort:提供該服務的容器所暴露(EXPOSE)的端口號,沒有指定targetPort,則默認targetPort與port相同
nodePort:節點端口,<nodeIP>:nodePort 是提供給集羣外部客戶訪問service的入口,默認的,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曝露出來的端口