Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将nginx入口自定义端口列入白名单_Nginx_Kubernetes_Azure Aks_Nginx Ingress - Fatal编程技术网

如何将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

我在Kubernetes中有一个nginx入口,它有一个白名单(由
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入口自定义端口列入白名单的问题。我已经编辑了我的答案,请看一看。爱,它。接受答案,谢谢!