我嘗試在 Ubuntu 18.04 Server 虛擬機器上開啟連接埠 30080,但看到一些令人困惑的結果。
iptables 輸出
ubuntu@k8-master:~$ sudo iptables -v -x -n -L [sudo] ubuntu 密碼: Chain INPUT(策略接受289個資料包,98798位元組) pkts 位元組目標 prot 選擇輸出來源目標 3919 272820 KUBE-SERVICES all -- * * 0.0.0.0/0 0.0.0.0/0 ctstate NEW /* kubernetes 服務入口網站 */ 3919 272820 KUBE-EXTERNAL-SERVICES all -- * * 0.0.0.0/0 0.0.0.0/0 ctstate NEW /* kubernetes 外部可見的服務入口網站 */ 846424 164692436 KUBE 防火牆全部 -- * * 0.0.0.0/0 0.0.0.0/0 Chain FORWARD(策略 DROP 0 封包,0 位元組) pkts 位元組目標 prot 選擇輸出來源目標 0 0 KUBE-FORWARD all -- * * 0.0.0.0/0 0.0.0.0/0 /* kubernetes 轉送規則 */ 0 0 KUBE-SERVICES all -- * * 0.0.0.0/0 0.0.0.0/0 ctstate NEW /* kubernetes 服務入口網站 */ 0 0 DOCKER-USER 全部 -- * * 0.0.0.0/0 0.0.0.0/0 0 0 DOCKER-ISOLATION-STAGE-1 全部 -- * * 0.0.0.0/0 0.0.0.0/0 0 0 全部接受 -- * docker0 0.0.0.0/0 0.0.0.0/0 ctstate 相關,已建立 0 0 DOCKER 全部 -- * docker0 0.0.0.0/0 0.0.0.0/0 0 0 全部接受 -- docker0 !docker0 0.0.0.0/0 0.0.0.0/0 0 0 全部接受 -- docker0 docker0 0.0.0.0/0 0.0.0.0/0 0 0 全部接受 -- * * 10.244.0.0/16 0.0.0.0/0 0 0 全部接受 -- * * 0.0.0.0/0 10.244.0.0/16 鏈輸出(策略接受281個資料包,145464位元組) pkts 位元組目標 prot 選擇輸出來源目標 6870 412563 KUBE-SERVICES all -- * * 0.0.0.0/0 0.0.0.0/0 ctstate NEW /* kubernetes 服務入口網站 */ 846213 192244364 KUBE 防火牆全部 -- * * 0.0.0.0/0 0.0.0.0/0 鏈 DOCKER (1 參考) pkts 位元組目標 prot 選擇輸出來源目標 鏈 DOCKER-ISOLATION-STAGE-1(1 篇參考文獻) pkts 位元組目標 prot 選擇輸出來源目標 0 0 DOCKER-ISOLATION-STAGE-2 全部 -- docker0 !docker0 0.0.0.0/0 0.0.0.0/0 0 0 回傳全部 -- * * 0.0.0.0/0 0.0.0.0/0 鏈 DOCKER-ISOLATION-STAGE-2(1 篇參考文獻) pkts 位元組目標 prot 選擇輸出來源目標 0 0 刪除所有 -- * docker0 0.0.0.0/0 0.0.0.0/0 0 0 回傳全部 -- * * 0.0.0.0/0 0.0.0.0/0 鏈 DOCKER-USER (1 條參考文獻) pkts 位元組目標 prot 選擇輸出來源目標 0 0 回傳全部 -- * * 0.0.0.0/0 0.0.0.0/0 鏈 KUBE-EXTERNAL-SERVICES (1 條參考文獻) pkts 位元組目標 prot 選擇輸出來源目標 0 0 REJECT tcp -- * * 0.0.0.0/0 0.0.0.0/0 /* robots-shop/web:8080 沒有端點 */ ADDRTYPE 匹配 dst-type LOCAL tcp dpt:30080拒絕-with icmp-port-unreachable 鏈 KUBE-FIREWALL (2 篇參考文獻) pkts 位元組目標 prot 選擇輸出來源目標 0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 /* 用於丟棄標記資料包的 kubernetes 防火牆 */ mark match 0x8000/0x8000 鏈 KUBE-FORWARD (1 篇參考文獻) pkts 位元組目標 prot 選擇輸出來源目標 0 0 全部刪除 -- * * 0.0.0.0/0 0.0.0.0/0 ctstate 無效 0 0 全部接受 -- * * 0.0.0.0/0 0.0.0.0/0 /* kubernetes 轉送規則 */ 標記符合 0x4000/0x4000 0 0 全部接受 -- * * 10.0.0.0/16 0.0.0.0/0 /* kubernetes 轉送 conntrack pod 來源規則 */ ctstate RELATED,ESTABLISHED 0 0 全部接受 -- * * 0.0.0.0/0 10.0.0.0/16 /* kubernetes 轉送 conntrack pod 目標規則 */ ctstate RELATED,ESTABLISHED 鏈 KUBE-SERVICES (3 篇參考文獻) pkts 位元組目標 prot 選擇輸出來源目標 0 0 REJECT tcp -- * * 0.0.0.0/0 10.96.93.102 /* robots-shop/cart:8080 沒有端點 */ tcp dpt:8080拒絕-with icmp-port-unreachable 0 0 REJECT tcp -- * * 0.0.0.0/0 10.111.89.174 /* robots-shop/web:8080 沒有端點 */ tcp dpt:8080拒絕-with icmp-port-unreachable
此外,ufw 將連接埠顯示為開啟:
sudo ufw status
Status: active
To Action From
-- ------ ----
30080 ALLOW Anywhere
30080/tcp ALLOW Anywhere
Netstat 也會顯示處於「偵聽」模式的連接埠:
netstat -talpn | grep 30080
tcp6 0 0 :::30080 :::* LISTEN -
所以我不確定為什麼 nmap 仍然顯示已過濾的連接埠:
nmap -Pn localhost -p 30080
PORT STATE SERVICE
30080/tcp filtered unknown
如果我從遠端電腦嘗試,nmap 顯示為已關閉:
PORT STATE SERVICE
30080/tcp closed unknown
不知道從這裡去哪裡。
答案1
經過一番研究,我認為這是一個 kubernetes 問題。似乎 kube-proxy 正在添加這一行:
/* robots-shop/web:8080 沒有端點 */ ADDRTYPE 匹配 dst-type LOCAL tcp dpt:30080reject-with icmp-port-unreachable
所以我想我會關閉這個主題並在 kubernetes 部分中打開另一個主題。謝謝。