如何使用基于目标组“IP”的 [AWS] 设置 Kubernetes NLB 负载均衡器?

Sri*_*nth 7 amazon-web-services kubernetes kubectl kubernetes-helm kubernetes-ingress

目前,我正在使用网络负载均衡器公开 k8s 服务。它创建了一个网络负载均衡器并将目标组设置为基于实例,一切正常。正如我们所知,节点中的端口始终在 30000 - 32767 的范围内。

不同的目标群体存在差异。基于实例的目标组用于保留客户端 IP,其中基于 IP 的目标组不保留客户端 IP。

现在安全组有问题,我想限制节点端口只能由负载均衡器的CIDR访问。由于它是基于实例的目标组,因此入站 IP 始终是客户端 IP。因此很难限制仅对某些 IP 的访问。

所以我的计划是将目标组切换到基于“IP”的组,这样我就可以限制对负载均衡器的 CIDR 的访问。

有没有其他方法可以使用基于 IP 的目标类型创建 NLB 负载平衡器?你能帮我一些建议吗?

apiVersion: v1
kind: Service
metadata:
  name: nginx-router
  annotations:
    service.beta.kubernetes.io/do-loadbalancer-protocol: "http"
    service.beta.kubernetes.io/do-loadbalancer-healthcheck-path: "/healthz"
    service.beta.kubernetes.io/aws-load-balancer-type: "nlb"
    service.beta.kubernetes.io/aws-target-type: ip
    service.beta.kubernetes.io/aws-load-balancer-ssl-cert: [tes]

    # service.beta.kubernetes.io/healthcheck-path: /healthz
spec:
  selector:
    app: nginx-router
  externalTrafficPolicy: Local
  ports:
    - port: 80
      targetPort: 80
      protocol : TCP
      name : http
    - port : 443
      targetPort: 443
      protocol : TCP
      name : https

  type: LoadBalancer
Run Code Online (Sandbox Code Playgroud)

BeW*_*eWu 1

我问自己是否真的需要通过网络负载均衡器来解决这个问题,或者 Kubernetes 中的解决方案是否更可取。

从集群中删除 NodePort 的最简单方法是实际上不在 Kubernetes 中定义 NodePort 类型的任何服务。如果某些已经存在,您可以轻松地将它们更改为 ClusterIP 类型,并且应该删除 NodePort。

由于您希望阻止对 NodePort 的任何访问,因此您可以考虑使用 ResourceQuota 来阻止创建任何 NodePort 类型的服务。通过这种方式,集群告诉用户他的服务将无法工作,而不仅仅是阻止流量到达应用程序,如果您不知道负载均衡器配置的具体情况,很可能会导致难以理解的超时。(参见此处参考:https://kubernetes.io/docs/concepts/policy/resource-quotas/#object-count-quota