首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GKE Nginx入侵控制器前面的全局负载均衡器(HTTPS负载平衡器)

GKE Nginx入侵控制器前面的全局负载均衡器(HTTPS负载平衡器)
EN

Stack Overflow用户
提问于 2022-06-02 13:00:43
回答 2查看 1.2K关注 0票数 5

我有一个GKE集群,它使用了Nginx入侵控制器作为它的入口引擎。目前,当我设置Nginx控制器时,我定义了一个服务kind: LoadBalancer,并将它指向先前在GCP上保留的外部静态IP。问题是,它只绑定到一个区域静态IP地址(如果我没有弄错的话,L4负载均衡器)。我想要一个全球负载均衡器代替。

我知道我可以通过使用GKE入口控制器来实现这一点,而不是使用Nginx入侵控制器。但是,我仍然想使用Nginx Ingress,因为它有强大的注释,比如根据条件重写标题等;GKE宏注释不可用的东西。

最后,是否有任何方法将全局负载均衡器与Nginx入口控制器结合起来,或者将全局负载均衡器放在由nginx创建的L4负载均衡器的前面?

我们需要有全球负载均衡器,以保护云装甲。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-07-22 20:03:36

最后,我设法使Nginx控制器和L7 HTTP(S)负载均衡器一起工作。

基于他自己的问题“repply”,我设法使它发挥作用。唯一的区别是,他的解决方案将安装一个经典的HTTP(S) LoadBalancer,而不是新版本,我还介绍了IP地址的创建、自签名证书的创建以及HTTP代理从HTTP重定向到HTTPS。我会在这里列出对我有用的详细步骤。

这些步骤假设我们已经创建了一个启用了VPC-native traffic routing的集群。

在需要HTTP(S) LoadBalancer之前,我只需要将NGINX页面提供的清单应用于Nginx控制器的安装,它将创建一个LoadBalancer类型的服务,然后自动创建一个区域性L4 LoadBalancer。

但是现在我需要有云装甲和WAF,L4负载平衡器不支持它。一个HTTPS(S)负载均衡器是需要云装甲工作。

为了让Nginx入侵控制器与新的HTTPS(S) LoadBalancer一起工作,我们需要将Nginx入侵控制器服务上的type: LoadBalancer更改为ClusterIP,并向其添加NEGE 213注释D14。我们这样做是因为我们不希望它为我们生成一个L4 LoadBalancer。相反,我们将手动创建一个HTTP(S) LoadBalancer,并通过它的NEG注释将其绑定到ingress-nginx-controller。稍后,当我们将我们的Nginx入侵控制器部署设置为我们的HTTPS LoadBalancer的后端服务时,这个绑定将发生。因此,回到Nginx大会控制器服务,它将以这样的方式结束:

代码语言:javascript
复制
apiVersion: v1
kind: Service
metadata:
  annotations:
  labels:
    helm.sh/chart: ingress-nginx-4.0.15
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/version: 1.1.1
    app.kubernetes.io/managed-by: Helm
    app.kubernetes.io/component: controller
  name: ingress-nginx-controller
  namespace: ingress-nginx
  annotations:
    cloud.google.com/neg: '{"exposed_ports": {"80":{"name": "ingress-nginx-80-neg"}}}'
spec:
  type: ClusterIP
  ipFamilyPolicy: SingleStack
  ipFamilies:
    - IPv4
  ports:
    - name: http
      port: 80
      protocol: TCP
      targetPort: http
      appProtocol: http
    - name: https
      port: 443
      protocol: TCP
      targetPort: https
      appProtocol: https
  selector:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/component: controller

--如果使用HELM安装Nginx,则需要重写配置以将NEG注释添加到服务中。所以values.yaml看起来是这样的:

代码语言:javascript
复制
controller:
  service:
    type: ClusterIP
    annotations:
      cloud.google.com/neg: '{"exposed_ports": {"80":{"name": "ingress-nginx-80-neg"}}}'

要安装它,请将入口-nginx添加到helm存储库中:

代码语言:javascript
复制
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update

然后安装它:

代码语言:javascript
复制
helm install -f values.yaml ingress-nginx ingress-nginx/ingress-nginx

接下来的步骤是:

代码语言:javascript
复制
ZONE=us-central1-a
CLUSTER_NAME=<cluster-name>
HEALTH_CHECK_NAME=nginx-ingress-controller-health-check
NETWORK_NAME=<network-name>
CERTIFICATE_NAME=self-managed-exp-<day>-<month>-<year>
NETWORK_TAGS=$(gcloud compute instances describe \
    $(kubectl get nodes -o jsonpath='{.items[0].metadata.name}') \
    --zone=$ZONE --format="value(tags.items[0])")

  1. 创建静态IP地址(如果已经跳过):

必须是高级层

代码语言:javascript
复制
gcloud compute addresses create ${CLUSTER_NAME}-loadbalancer-ip \
    --global \
    --ip-version IPV4

  1. 创建防火墙规则,允许L7 HTTP(S)负载均衡器访问集群

代码语言:javascript
复制
gcloud compute firewall-rules create ${CLUSTER_NAME}-allow-tcp-loadbalancer \
    --allow tcp:80 \
    --source-ranges 130.211.0.0/22,35.191.0.0/16 \
    --target-tags $NETWORK_TAGS \
    --network $NETWORK_NAME

  1. 为我们将要创建的后端服务

创建健康检查。

代码语言:javascript
复制
gcloud compute health-checks create http ${CLUSTER_NAME}-nginx-health-check \
  --port 80 \
  --check-interval 60 \
  --unhealthy-threshold 3 \
  --healthy-threshold 1 \
  --timeout 5 \
  --request-path /healthz

  1. 创建一个后端服务,用于通知LoadBalancer如何连接和分发贸易到豆荚.

代码语言:javascript
复制
gcloud compute backend-services create ${CLUSTER_NAME}-backend-service \
    --load-balancing-scheme=EXTERNAL \
    --protocol=HTTP \
    --port-name=http \
    --health-checks=${CLUSTER_NAME}-nginx-health-check \
    --global

  1. 现在是时候将Nginx服务(前面注释过的那个)添加到上一步创建的后端服务:

代码语言:javascript
复制
gcloud compute backend-services add-backend ${CLUSTER_NAME}-backend-service \
  --network-endpoint-group=ingress-nginx-80-neg \
  --network-endpoint-group-zone=$ZONE \
  --balancing-mode=RATE \
  --capacity-scaler=1.0 \
  --max-rate-per-endpoint=100 \
  --global

  1. 创建负载均衡器本身(URL映射)

代码语言:javascript
复制
gcloud compute url-maps create ${CLUSTER_NAME}-loadbalancer \
    --default-service ${CLUSTER_NAME}-backend-service

  1. 创建自管理证书。(这可能是Google管理的证书,但我们将在这里介绍self-managed).

代码语言:javascript
复制
gcloud compute ssl-certificates create $CERTIFICATE_NAME \
    --certificate=my-cert.pem \
    --private-key=my-cert-key.pem \
    --global

最后,我将通过控制台接口设置负载平衡器前端,这要容易得多。

要创建

  1. 前端,请在控制台上输入负载平衡器,然后单击"Edit".

  1. 前端配置选项卡将是不完整的。去吧,

  1. 点击“添加前端IP和

  1. 给它命名,并在字段协议上选择HTTPS。

  1. On IP地址从短暂的更改为以前分配的静态IP

  1. 选择您的证书,并在需要时将启用HTTPS重定向。(我做了)

  1. 保存LoadBalancer。在进入LoadBalancer页面时,我们应该看到nginx实例健康和绿色。在我的例子中,我已经将Nginx控制器设置为有4个副本:

最后,我们只需要将我们的域指向LoadBalancer IP并创建我们的入侵文件。

注意:大会现在将不处理证书。证书现在将由LoadBalancer外部管理。因此,大会将没有tls定义:

代码语言:javascript
复制
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/upstream-fail-timeout: "1200"
    nginx.ingress.kubernetes.io/configuration-snippet: |
      set $http_origin "${scheme}://${host}";
      more_set_headers "server: hide";
      more_set_headers "X-Content-Type-Options: nosniff";
      more_set_headers "Referrer-Policy: strict-origin";
  name: ingress-nginx
  namespace: prod

spec:
  rules:
  - host: app.mydomain.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: frontend
            port:
              number: 80
票数 1
EN

Stack Overflow用户

发布于 2022-06-11 15:29:16

您可以将Nginx创建为LoadBalancer类型的服务,并按照此谷歌文档为其提供一个NEG注释。

https://cloud.google.com/kubernetes-engine/docs/how-to/container-native-load-balancing

然后可以将此NEG用作HTTP(S)负载平衡的后端服务(目标)

您可以使用本文中的gcloud命令。

https://hodo.dev/posts/post-27-gcp-using-neg/

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72476714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档