如何将nginx入口自定义端口列入白名单
我在Kubernetes中有一个nginx入口,它有一个白名单(由如何将nginx入口自定义端口列入白名单,nginx,kubernetes,azure-aks,nginx-ingress,Nginx,Kubernetes,Azure Aks,Nginx Ingress,我在Kubernetes中有一个nginx入口,它有一个白名单(由nginx.ingres.Kubernetes.io/whitelist源范围注释处理)和一个自定义端口映射(通过--tcp services configmapconfigmap公开SFTP服务器端口22)。白名单适用于80和443,但不适用于22。如何将自定义端口列入白名单 配置大致如下所示: apiVersion: apps/v1 kind: Deployment metadata: name: nginx-ingres
nginx.ingres.Kubernetes.io/whitelist源范围
注释处理)和一个自定义端口映射(通过--tcp services configmap
configmap公开SFTP服务器端口22)。白名单适用于80和443,但不适用于22。如何将自定义端口列入白名单
配置大致如下所示:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-ingress-controller
namespace: ingress-nginx
labels:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
spec:
...
spec:
serviceAccountName: nginx-ingress-serviceaccount
containers:
- name: nginx-ingress-controller
image: quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.33.0
args:
- /nginx-ingress-controller
- --configmap=$(POD_NAMESPACE)/nginx-configuration
- --tcp-services-configmap=$(POD_NAMESPACE)/tcp-services
- --udp-services-configmap=$(POD_NAMESPACE)/udp-services
- --publish-service=$(POD_NAMESPACE)/ingress-nginx
- --annotations-prefix=nginx.ingress.kubernetes.io
ports:
- name: http
containerPort: 80
- name: https
containerPort: 443
- name: sftp
containerPort: 22
...
kind: Ingress
metadata:
name: {{ .controllerName }}
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/whitelist-source-range: {{ .ipAllowList }}
kind: ConfigMap
apiVersion: v1
metadata:
name: tcp-services
namespace: ingress-nginx
labels:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
data:
22: "default/sftp:22"
更新
感谢@jordanm,我发现我可以通过LoadBalancer中的loadBalancerSourceRanges
而不是nginx来限制所有端口的IP地址:
kind: Service
apiVersion: v1
metadata:
name: ingress-nginx
namespace: ingress-nginx
labels:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
spec:
externalTrafficPolicy: Local
type: LoadBalancer
loadBalancerIP: {{ .loadBalancerIp }}
selector:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
ports:
- name: http
port: 80
targetPort: http
- name: https
port: 443
targetPort: https
- name: sftp
port: 22
targetPort: sftp
loadBalancerSourceRanges:
{{ .ipAllowList }}
首先看一下这个问题: IP不是TCP服务的白名单,另一种选择是为TCP服务创建单独的防火墙,并在防火墙级别将IP列入白名单 对于我们定义的特定位置 检查正式入口文档: 入口公开从集群外部到集群内服务的HTTP和HTTPS路由。流量路由由入口资源上定义的规则控制 入口不会暴露任意端口或协议。向internet公开HTTP和HTTPS以外的服务通常使用service.type=NodePort或service.type=LoadBalancer类型的服务 您必须拥有入口控制器才能满足入口要求。只有 创建入口资源无效 在这种情况下,Ingress resource instrument Ingress controller如何处理http/https请求。在这种方法中,nginx入口控制器作为软件(引入第7层功能/负载平衡) 如果您对nginx ingress tcp支持感兴趣: 入口不支持TCP或UDP服务。因此,此入口控制器使用标志--tcp服务配置映射和--udp服务配置映射 见:
如果您想在使用TCP服务时检查更多的粒度配置,则应该考虑使用云提供商提供的L4负载平衡/防火墙设置。< /P>您的入口前是否有负载均衡器?负载均衡器支持非http协议吗?@jordanm:是的,前面有负载均衡器服务。有没有更好的方法来设置允许列表?负载平衡器支持tcp服务还是只支持http?@jordanm I公开我需要的端口:80、443和22。在您的帮助下,我发现了
loadBalancerSourceRanges
设置,虽然这没有回答我的确切问题,但它解决了我的问题,谢谢!很高兴你明白了。我很高兴能得到一些帮助。FYI我不认为这是对我的问题的实际回答,这就是为什么我在这个问题上发表了我的回答。它确实解决了我的问题,因为我碰巧使用了负载平衡器,但它没有回答如何将nginx入口自定义端口列入白名单的问题。我已经编辑了我的答案,请看一看。爱,它。接受答案,谢谢!