1、使用nodetype類型
1.1、第一種類型創建:直接在yaml中標記是nodePort
apiVersion: v1
kind: Service
metadata:
name: nginx-service-nodeport
spec:
selector:
app: nginx
ports:
- name: http
port: 8000
protocol: TCP
targetPort: 80
- name: https
port: 8443
protocol: TCP
targetPort: 443
type: NodePort
1.1、查詢service進行比較
-1、觀察對比可以看見,在暴露的端口后面跟着一個端口
-2、pod還是上一個步驟創建的pod,並沒有發生任何改變
-3、也就是說pod的訪問方式還是可以進行的
![]()
-4、那么創建的service如果進行訪問?![]()
![]()
![]()
- service的clusterip可以使用,使用方式serviceClusterIP:port(其他方式都不行),所有的節點都可以通過訪問serviceClusterIP:port進行訪問服務
- pod的clusterip進行訪問,使用方式podClusterIP:targetport,但是每個節點只能使用自己節點的podClusterIP訪問自己的pod
- node的ip進行訪問,使用方式nodeIP:nodePort(如果nodePort沒有指定,創建service會自動生成一個)
1.2、使用錯誤說明:
如果pod在running,但是服務不能訪問,就查看一下service的pod有沒有寫正確
![]()
![]()
2、直接暴露端口,不創建service使用nodetype類型
2.1、創建pod
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- name: http
port: 8000
protocol: TCP
targetPort: 80
- name: https
port: 8443
protocol: TCP
targetPort: 443
2.2、直接暴露端口
kubectl run --port=80(或者kubectl expose --port=80)
kubectl expose deployment nginx-deployment-2 --type=NodePort
直接對deployment進行expose,指定暴露類型
![]()
- 直接expose,會生成一個和deployment一樣名稱的service
直接expose,不指定暴露的端口,會默認將targetPort(80)暴露到一個隨機的端口(22796)上
![]()
![]()
依然可以使用serviceIP:targetPort進行服務訪問
![]()
- 使用方式和修改yaml添加type是完全一樣的
如果直接expose指定port,會使用你指定的端口去覆蓋你最開始設置的targetPort和port
![]()
- 以前在進行service創建的時候,port和targetPort可以不一樣,但是如果直接expose就會直接修改port和targetPort,可能導致我們的pod不能訪問,所以在expose的時候,最好不要添加"port=8081"
#最好不使用port=8081參數,會修改port和target導致不能訪問 kubectl expose deployment nginx-deployment-2 --type=NodePort --port=8081
創建service時,保持targetPort和containerPort一致,最好也和port一樣,免得生是非
![]()
3、使用nodetype類型總結
1、沒有辦法在外部網絡訪問一個IP直接進行pod負載,只能通過nodeIP:nodePort進行同一個Node上pod的負載訪問
2、沒有辦法訪問一個名稱映射到服務上面
3、最好的方式,創建完deployment之后,直接expose生成service,此時你就不用管你到底要暴露什么port和targetport,系統會自動幫你生成,如果此時你感覺nodePort不是你要的,或者clusterIP不是你要的,你直接edit創建的service即可
4、如果感覺expose有點麻煩,還是想創建service.yaml文件,就直接按照下面模板進行更改即可
apiVersion: v1 kind: Service metadata: labels: app: nginx name: nginx-service namespace: default spec: clusterIP: 10.68.232.62(可以手動指定) externalTrafficPolicy: Cluster ports: - name: nginx protocol: TCP port: 80 targetPort: 80 nodePort: 26363(范圍:20000-40000) selector: app: nginx type: NodePort
作者:糖紙瘋了
鏈接:https://www.jianshu.com/p/75af95641c91
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權並注明出處。