【K8S】kubernetes集羣外部訪問Pod或Service

由於Pod和Service是kubernetes集羣範圍內的虛擬概念,所以集羣外的客戶端系統無法通過Pod的IP地址或者Service的虛擬IP地址和虛擬端口號訪問到它們。爲了讓外部客戶端可以訪問這些服務,可以將Pod或Service的端口號映射到宿主機,以使得客戶端應用能夠通過物理機訪問容器應用。

將容器應用的端口號映射到物理機

(1) 通過設置容器級別的hostPort,將容器應用的端口號映射到物理機上:

apiVersion: v1
kind: Pod
metadata:
  name: webapp
  labels:
    app: webapp
spec:
  containers:
  - name: webapp
    image: tomcat
    ports:
    - containerPort: 8080
      hostPort: 8081 # 通過物理機的IP地址和8081端口訪問Pod的tomcat服務

(2) 通過設置Pod級別的hostNetwork=true,改Pod中所有容器的端口號都將被直接映射到物理機上。設置hostNetwork=true時需要注意,在容器的ports定義部分如果不指定hostPort,則默認hostPort等於containerPort,如果制定了hostPort,則hostPort必須等於containerPort的值。

apiVersion: v1
kind: Pod
metadata:
  name: webapp
  labels:
    app: webapp
spec:
  hostNetwork: true
  containers:
  - name: webapp
    image: tomcat
    ports:
    - containerPort: 8080 # 通過物理機的IP地址和8080端口訪問Pod的tomcat服務

將Service的端口號映射到物理機

(1) 通過設置nodePort映射到物理機,同時設置Service的類型爲NodePort:

apiVersion: v1
kind: Service
metadata:
  name: webapp
spec:
  type: NodePort
  ports:
  - port: 8080 # service 所需的端口號
    targetPort: 8080 # 後端pod的端口號
    nodePort: 8081  # 與service端口號映射的物理節點的端口號,通過物理機的IP地址和8081端口訪問Pod的tomcat服務
    selector:
      app: webapp

(2) 通過設置LoadBalancer映射到雲服務商提供的LoadBalancer地址。這種方法僅用於在公有云服務提供商的雲平臺上設置Service的場景。

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: myapp
  ports:
  - protocol: TCP
    port: 80
    targerPort: 9376
    nodePort: 30001
  clusterIP: 10.0.171.239
  loadBalancerIP: 78.11.24.19
  type: LoadBalancer
status:
  loadBalancer:
    ingress:
    - ip: 146.148.47.155 # 雲服務商提供的負載均衡器的IP地址
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章