❶ Nginx Ingress TCP代理實現
一般使用ingress都是代理http流量,但是有些場景希望代理tcp流量,例如:不想佔用過多的公網IP。
開源的ingress對tcp支持不是很好,主要原因在於 k8s的Ingress沒有給tcp留下插入點 ,可以通過ingress定義 kubectl explain ingress.spec.rules 證實。
ingress http代理簡單來說,暴露一個http服務,根據host和path轉發用戶請求到真正的svc(用戶請求帶有host)。tpc代理就是暴露一堆埠號,不同的埠對應不同的後端svc。
官網 暴露TCP服務 章節,介紹可以通過 --tcp-services-configmap 暴露tcp服務,具體怎麼使用沒有實踐之前一直不是很理解。
通過chart安裝包可以獲取nginx-ingress-controller deployment啟動配置。
deploy腳本示例
tcp的相關配置通過configmap存儲,需要注意data屬性,controller會解析它。
登陸controller的Pod,直接查看nginx.conf,在最後一行,可以看到nginx代理配置。直接通過 curl localhost:8080 ,可以正常訪問服務。
nginx.conf示例
整體架構可以參考
https://blog.csdn.net/shida_csdn/article/details/84032019
NGINXController有個channel,所有更新事件通過watch傳到這個channel;同時channel通過queue綁定NGINXController的syncIngress,用於處理變更事件。
有關watch的初始化在store.go中實現,當key的名稱為tpcconfigmap時,會觸發更新。
internal/ingress/controller/store/store.go
1)在tcp configmap手動新增配置,ingress contorller svc會不會動態改變?
更多文章見: http://huiwq1990.github.io/
❷ Nginx反向代理TCP協議【反代SSH埠】
當需要通過Nginx間接訪問TCP協議的服務,如SSH,以實現埠轉發時,一個常見的需求應運而生。
要實現這一目標,首先需要理解反向代理的工作原理。Nginx作為一款強大的網路伺服器,能夠將客戶端的請求轉發到後端伺服器,即使後端伺服器運行的是非HTTP協議,如TCP。這里,我們關注的是如何配置Nginx來代理SSH連接。
配置過程中,關鍵在於設置正確的代理規則。通常,需要在Nginx的配置文件中添加一個新的location塊,指定監聽的埠(如22822)以及目標伺服器的地址和SSH埠(默認為22)。確保防火牆和Nginx伺服器的許可權設置允許這種通信。
在實施時,注意事項不可忽視。首先,要確保Nginx配置的正確性,避免語法錯誤。其次,檢查目標SSH伺服器的配置,確認它是否允許來自Nginx代理的連接。還要注意安全,可能需要使用SSL/TLS加密,以保護數據傳輸。
深入了解Nginx的proxy_pass指令和相關模塊,如stream模塊,可以幫助你更精確地管理TCP代理。同時,定期檢查Nginx日誌以發現和解決問題也是必不可少的。
一旦配置完成,SSH客戶端只需連接到VPS的22822埠,即可成功地通過Nginx反向代理訪問SSH服務。至此,反代任務已順利完成,可以開始高效地使用了。