從集群外部訪問pod或service

2021-10-08 12:13:56 字數 2598 閱讀 7140

由於pod和service都是kubernetes集群範圍內的虛擬概念,所以集群外的客戶端系統無法通過pod的ip位址或者service的虛擬ip位址和虛擬埠號訪問它們。

為了讓外部客戶端可以訪問這些服務,可以將pod或service的埠號對映到宿主機,以使客戶端應用能夠通過物理機訪問容器應用。

設定容器級別的hostport

通過設定容器級別的hostport,將容器應用的埠號對映到物理機上:

[root@k8s-master ~]

# vim pod-hostport.yaml

apiversion

: v1

kind

: pod

metadata

:name

labels

:spec

:containers:-

name

image

: tomcat

ports:-

containerport

:8080

hostport

:8081

通過kubectl create命令建立這個pod:

[root@k8s-master ~]

# kubectl create -f pod-hostport.yaml

[root@k8s-master ~]

# kubectl get pod

name ready status restarts age

[root@k8s-master ~]

# curl 192.168.1.8:8081

設定pod級別的hostnetwork=true

通過設定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

[root@k8s-master ~]

# curl -i 192.168.1.8:8080

通過設定nodeport對映到物理機,同時設定service的型別為nodeport:
[root@k8s-master ~]

apiversion

: v1

kind

: service

metadata

:name

spec

:type

: nodeport # 重點

ports:-

port

:8080

targetport

:8080

nodeport

:30080

# 重點

selector

:

[root@k8s-master ~]
curl -i 192.168.1.8:30080

curl -i 192.168.1.9:30080

同樣,對該service的訪問也將被負載分發到後端的多個pod上。

設定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 可以看到 預設是從第乙個網絡卡的...