一、 如何從外部網絡訪問
Kubernetes的Pod IP和Cluster IP都只能在集群內部訪問,而我們通常需要從外部網絡上訪問集群中的某些服務,Kubernetes提供了下述幾種方式來為集群提供外部流量入口。
二、需求
有一pod,里面有rabbitmq服務,先想從外部通過ip:15672訪問MQ的管理員界面查看隊列消費情況。
方法1(pod會重啟):
方法2: NodePort(pod不會重啟,更適合生產環(huán)境)
NodePort在集群中的主機節(jié)點上為Service提供一個代理端口,以允許從主機網絡上對Service進行訪問。Kubernetes官網文檔只介紹了NodePort的功能,并未對其實現原理進行解釋。下面我們通過實驗來分析NodePort的實現機制。
執(zhí)行下面的命令創(chuàng)建一個nodeport類型的service。
kubectl apply -f rmq-np-svc.yaml
rmq-np-svc.yaml內容(注意:端口范圍只能是 30000-32767):
apiVersion: v1
kind: Service
metadata:
namespace: yie-edge
labels:
baetyl-app-name: basic-service
name: rabbitmq-np-service
spec:
ports:
- name: 15672-15672
nodePort: 31672
port: 15672
protocol: TCP
targetPort: 15672
selector:
baetyl-app-name: basic-service
type: NodePort
status:
loadBalancer: {}
三、Kubernetes中的nodePort,targetPort,port的區(qū)別和意義
nodePort
外部機器可訪問的端口。
比如一個Web應用需要被其他用戶訪問,那么需要配置type=NodePort,而且配置nodePort=31672,那么其他機器就可以通過瀏覽器訪問IP:31672訪問到該服務,例如http://172.19.12.13:31672。
例如rabbitmq可能不需要被外界訪問,只需被內部服務訪問,那么不必設置NodePort
targetPort
容器的端口(最根本的端口入口),與制作容器時暴露的端口一致
port
kubernetes中的服務之間訪問的端口,盡管rabbitmq容器暴露,15672端口,但是集群內其他容器需要通過15672端口訪問該服務,外部機器不能訪問rabbitmq服務,因為他沒有配置NodePort類型
四、操作
通過netstat命令可以看到Kube-proxy在主機網絡上創(chuàng)建了30080監(jiān)聽端口,用于接收從主機網絡進入的外部流量。
查看創(chuàng)建的service,可以看到kubernetes創(chuàng)建了一個名為rmq-np-svc的service,并為該service在主機節(jié)點上創(chuàng)建了31672這個Nodeport。文章來源:http://www.zghlxwxcb.cn/news/detail-422074.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-422074.html
到了這里,關于k8s外部訪問pod內部容器的端口-NodePort的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!