有時(shí)候我們需要向集群外部暴露一些服務(wù),這時(shí)候可以指定service的port類型為NodePort來實(shí)現(xiàn)。這時(shí)k8s會(huì)為集群中的每一個(gè)node打開nodePort端口來讓外部訪問。比如集群中有三個(gè)節(jié)點(diǎn):192.168.0.1、192.168.0.2、192.168.0.3,則我們可以通過9.168.0.1:nodePort也可以通過9.168.0.2/3:nodePort來進(jìn)行訪問。
但是默認(rèn)的,nodePort的范圍是30000-32767, k8s會(huì)從中隨機(jī)選擇一個(gè)端口,也可以在spec.ports.nodePort中來指定一個(gè)端口。
當(dāng)然我們可以通過修改apiserver的--service-node-port-range 的參數(shù)來修改默認(rèn)范圍,如:--service-node-port-range 8000-9000
當(dāng)服務(wù)啟動(dòng)以后,我們可以通過lsof -i:9000來查看端口監(jiān)控情況。
如果端口已經(jīng)打開,但是其他節(jié)點(diǎn)無法訪問,注意查看防火墻設(shè)置,ufw disable 關(guān)閉防火墻即可。
kind: Service
apiVersion: v1
metadata:
name: my-service
spec:
type: NodePort //指定service類型
selector:
app: forme
ports:
- port: 80 // 供集群中其它c(diǎn)ontainer訪問端口
targetPort: 8020 //轉(zhuǎn)向后端pod中container暴露的端口
nodePort: 9000 //節(jié)點(diǎn)暴露的端口
---
apiVersion: v1
kind: ReplicationController
metadata:
name: forme
namespace: default
spec:
replicas: 1
selector:
app: forme
template:
metadata:
name: forme
labels:
app: forme
spec:
volumes:
- name: "config"
hostPath:
path: "/data/xxx"
containers:
- name: forme
image: forme:k8s
#command: ["/bin/sh", "-c"]
#args: ["tail -f /dev/null"]
#args: ["sleep 20"]
resources:
limits:
alpha.kubernetes.io/nvidia-gpu: 1
#cpu: 8
#memory: 4Gi
ports:
- containerPort: 8020 //該container監(jiān)控的端口
volumeMounts:
- name: "config"
mountPath: "/home/docker/code"