nginx ingress 如何使用 7 层负载均衡 您所在的位置:网站首页 腾讯云clb配置 nginx ingress 如何使用 7 层负载均衡

nginx ingress 如何使用 7 层负载均衡

2023-08-22 10:22| 来源: 网络整理| 查看: 265

当前 nginx ingress 在云 CLB 接入的时候,使用了 4 层的 CLB 侦听,这样本身是合理的。但有些云产品功能却无法在四层下工作,如:证书绑定,WAF 等。

本文探讨一个方法,使用七层的 CLB 接入 nginx ingress。

腾讯云 nginx ingress 的工作原理

腾讯云的默认 nginx ingress 的流量如下:

CLB -> TCP -> nginx-controller -> http -> 后端应用 pod。

ingress 为 nginx 提供了路由规则。

通过 CLB Ingress 来接入

现在,我们尝试在配置了 nginx ingress 的基础上来使用“普通的Ingress”来接入流量。

我们知道,nginx ingress 其实就是在集群里部署了 nginx,并且提供了 crd 来管理 nginx 的配置文件。我们可以看到在 kube-system下,有 nginx 部署的 pod 和 service,名字是:“xxx-ingress-nginx-controller”。

服务 “xxx-ingress-nginx-controller” 是 LoadBalancer 类型的,CLB 指向了主机的 IP 和 NodePort 端口。

了解了这个原理,我们就可以来尝试创建一个 CLB 类型的 Ingress 来接入外部流量。

首先,需要创建一个 NodePort 类型的 Service 指向 nginx controller:

apiVersion: v1 kind: Service metadata: name: ng-controller namespace: kube-system spec: type: NodePort ports: - name: http port: 80 protocol: TCP targetPort: http - name: https port: 443 protocol: TCP targetPort: https selector: k8s-app: xyz-ingress-ingress-nginx-controller qcloud-app: xyz-ingress-ingress-nginx-controller我们创建的 NginxIngress 的 Class 名字是 xyz-ingress

创建一个 CLB Ingress 指向这个 Service:

apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: name: clb-echo-ingress namespace: xyz annotations: kubernetes.io/ingress.class: qcloud spec: rules: - http: paths: - backend: serviceName: ng-controller.kube-system servicePort: 80 path: /此处的命名空间可以和你的应用保持一致。

通过上述两个资源的应用,就可以实现 七层的 CLB 接入了。

其实,nginx ingress 的 class 创建的时候,已经为 nginx 创建了一个 service 了。我们可以复用这个 service。

apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: name: clb-echo-ingress namespace: kube-system annotations: kubernetes.io/ingress.class: qcloud spec: rules: - http: paths: - backend: serviceName: xyz-ingress-nginx-controller servicePort: 80 path: /直接指向了 nginx controller 创建的服务与 nginx controller 保持在同一个命名空间

注意:

当前直接使用 CLB Ingress 指向 nginx controller 的 service 当前有一点 bug,具体需要修改 xxx-nginx-controller 这个 service,将 port: http 修改为 port: 80。 官方正在修改。nginx-ingress 自己创建的那个 CLB 浪费了。:(

腾讯云 Nginx Ingress 参考:https://cloud.tencent.com/document/product/457/50502



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有