带鉴权的端口转发可以用Frp做,但Frp最少需要一个服务端和一个客户端,部署麻烦,这次做的端口转发不需要鉴权,直接用Nginx来做了,记一下方便以后抄
用的镜像是这个:
nginx:1.25.2-alpine-slim
需要两个配置文件:
一个是/etc/nginx/nginx.conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
include /etc/nginx/conf.d/portforward.conf;
因为不提供http服务,相关的配置全删掉,/etc/nginx/conf.d下默认会带一个default.conf,懒得再写文件覆盖它了,在上面的include中指定单个文件了
另一个是/etc/nginx/conf.d/portforward.conf
stream {
upstream forward {
server target.domain:port;
}
server {
listen 80;
proxy_pass forward;
}
}
stream->upstream->server可以写域名,也可以写ip
在k8s里以Daemonset方式部署时,创建一个NodePort类型的Service暴露端口,还需要给Service的externalTrafficPolicy
设置成Local
,让主机端口进来的流量只路由到本机上的pod,避免流量被k8s转发给别的节点上的pod,导致客户端请求的ip与被代理的服务端看到的ip不一致