由於pod和service都是kubernetes集群範圍內的虛擬概念,所以集群外的客戶端系統無法通過pod的ip位址或者service的虛擬ip位址和虛擬埠號訪問它們。
為了讓外部客戶端可以訪問這些服務,可以將pod或service的埠號對映到宿主機,以使客戶端應用能夠通過物理機訪問容器應用。
設定容器級別的hostport
通過設定容器級別的hostport,將容器應用的埠號對映到物理機上:
通過kubectl create命令建立這個pod:[root@k8s-master ~]
# vim pod-hostport.yaml
apiversion
: v1
kind
: pod
metadata
:name
labels
:spec
:containers:-
name
image
: tomcat
ports:-
containerport
:8080
hostport
:8081
[root@k8s-master ~]
# kubectl create -f pod-hostport.yaml
[root@k8s-master ~]
# kubectl get pod
name ready status restarts age
設定pod級別的hostnetwork=true[root@k8s-master ~]
# curl 192.168.1.8:8081
通過設定pod級別的hostnetwork=true,該pod中所有容器的埠號都將被直接對映到物理機上。
在設定hostnetwork=true時需要注意,在容器的ports定義部分如果不指定hostport,則預設hostport等於containerport,如果指定了hostport,則hostport必須等於containerport的值:
[root@k8s-master ~]
# vim pod-hostnetwork.yaml
apiversion
: v1
kind
: pod
metadata
:name
labels
:spec
:hostnetwork
:true
# 重點
containers:-
name
image
: tomcat
imagepullpolicy
: never
ports:-
containerport
:8080
[root@k8s-master ~]
# kubectl create -f pod-hostnetwork.yaml
通過設定nodeport對映到物理機,同時設定service的型別為nodeport:[root@k8s-master ~]
# curl -i 192.168.1.8:8080
[root@k8s-master ~]
apiversion
: v1
kind
: service
metadata
:name
spec
:type
: nodeport # 重點
ports:-
port
:8080
targetport
:8080
nodeport
:30080
# 重點
selector
:
[root@k8s-master ~]
同樣,對該service的訪問也將被負載分發到後端的多個pod上。curl -i 192.168.1.8:30080
curl -i 192.168.1.9:30080
設定loadbalancer
通過設定loadbalancer對映到雲服務商提供的loadbalancer位址。
這種用法僅用於在公有雲服務提供商的雲平台上設定service的場景。
在下面的例子中,status.loadbalancer.ingress.ip設定的146.148.47.155為雲服務商提供的負載均衡器的ip位址。對該service的訪問請求將會通過loadbalancer**到後端pod上,負載分發的實現方式則依賴於雲服務商提供的loadbalancer的實現機制:
從外部訪問K8s中Pod的五種方式
hostnetwork hostport nodeport loadbalancer ingress 暴露pod與service一樣,因為pod就是service的backend 1 hostnetwork true 在pod中使用該配置,在這種pod中執行的應用程式可以直接看到pod啟動的主機的網...
React學習 從外部訪問元件 生命週期方法
讓react應用與外界進行通訊的方法,是在使用reactdom.render 方法進行渲染時,把引用賦值給乙個變數,然後在外部通過該變數訪問元件 現在就可以通過mytextareacounter訪問元件的方法和屬性,就像是在元件的內部使用this訪問一樣。除此之外,還能通過該變數設定新的state值...
linux 指定從某個ip訪問某個主機或網路
linux 指定從某個ip訪問某個主機或網路 測試機a上有3個ip 分別為 eth0 192.168.1.34 eth0 1 192.168.1.36 eth1 192.168.1.35 首先在測試機b上開機apache access log 接著在測試機a上訪問b 可以看到 預設是從第乙個網絡卡的...