通過NodePort向k8s集群外部暴露服務

有時候我們需要向集群外部暴露一些服務,這時候可以指定service的port類型為NodePort來實現。這時k8s會為集群中的每一個node打開nodePort端口來讓外部訪問。比如集群中有三個節點:192.168.0.1、192.168.0.2、192.168.0.3,則我們可以通過9.168.0.1:nodePort也可以通過9.168.0.2/3:nodePort來進行訪問。
但是默認的,nodePort的范圍是30000-32767, k8s會從中隨機選擇一個端口,也可以在spec.ports.nodePort中來指定一個端口。
當然我們可以通過修改apiserver--service-node-port-range 的參數來修改默認范圍,如:--service-node-port-range 8000-9000

當服務啟動以后,我們可以通過lsof -i:9000來查看端口監控情況。
如果端口已經打開,但是其他節點無法訪問,注意查看防火墻設置,ufw disable 關閉防火墻即可。

kind: Service
apiVersion: v1
metadata:
  name: my-service
spec:
  type: NodePort //指定service類型
  selector:
    app: forme
  ports:
    - port: 80 // 供集群中其它container訪問端口
      targetPort: 8020 //轉向后端pod中container暴露的端口
      nodePort: 9000 //節點暴露的端口

---
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監控的端口
        volumeMounts:
        - name: "config"
          mountPath: "/home/docker/code"
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容