前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >nginx ingress 如何使用 7 层负载均衡

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

原创
作者头像
谢正伟
发布2021-11-15 15:10:32
1.4K0
发布2021-11-15 15:10:32
举报
文章被收录于专栏:云原生研究云原生研究

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

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

腾讯云 nginx ingress 的工作原理

腾讯云的默认 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:

代码语言:txt
复制
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:

代码语言:txt
复制
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。

代码语言:txt
复制
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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 腾讯云 nginx ingress 的工作原理
  • 通过 CLB Ingress 来接入
相关产品与服务
负载均衡
负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档