首页 > 其他分享 >Flomesh Ingress 使用实践(三)多租户 Ingress

Flomesh Ingress 使用实践(三)多租户 Ingress

时间:2023-02-03 13:31:20浏览次数:68  
标签:kubectl Ingress httpbin 租户 fsm Flomesh Controller

背景

在当下的云计算时代,我们经常会听到“租户”、“多租户”。“租户”是多租户架构技术中的概念,这种技术是用来处理多个组织共用同一个系统或者组件时的数据隔离性。在 Kubernetes 中的最简单的多租户是根据命名空间( Namespace)进行划分的,众多的命名空间将资源/工作负载进行了隔离。

16751642221847.png

作为 Kubernetes 资源之一的 Ingress 也不例外,用户可以在不同的命名空间下创建 Ingress 资源来控制进入集群的流量。即使 Ingress 资源实现了多租户,但作为组件的 Ingress Controller 依然是共用的,没有做到真正的隔离。

因此就有了多租户 Ingress Controller 的诉求:每个命名空间下都有独立的 Ingress Controller,命名空间之间做到组件的隔离,达到了互不影响目的。

原理

Flomesh 提出了 NamespacedIngress 的概念,通过控制器在指定的命名空间下部署 Ingress Controller。每个 Ingress Controller 只处理各自命名空间下 Ingress 资源标识的流量。

比如下面的 YAML 中定义了监控在端口 100 上的 Ingress Controller,同时还会为其创建 LoadBalancer 类型的 Service,监听在 100 端口。

apiVersion: flomesh.io/v1alpha1  
kind: NamespacedIngress  
metadata:  
  name: namespaced-ingress-100  
  namespace: test-100  
spec:  
  serviceType: LoadBalancer  
  ports:  
  - name: http  
    port: 100  
    protocol: TCP  

16751642221863.png

Demo

安装 Flomesh Ingress Controller

Flomesh 提供了标准的 Helm chart,可以通过 Helm CLI 进行安装。

helm repo add fsm https://flomesh-io.github.io/fsm
helm repo update

helm install fsm fsm/fsm --namespace fsm --create-namespace \
  --set fsm.version=0.2.1-alpha.2 \
  --set fsm.serviceLB.enabled=true \
  --set fsm.ingress.namespaced=true

确认所有 pod 都启动并正常运行。

kubectl get po -n fsm
NAME                           READY   STATUS    RESTARTS   AGE
fsm-repo-5f6dc647c7-k4sdl      1/1     Running   0          14s
fsm-manager-864c74b978-mgfb2   1/1     Running   0          14s

创建示例应用

# 创建命名空间
kubectl create ns httpbin

# 部署应用
kubectl apply -f https://raw.githubusercontent.com/flomesh-io/osm-edge-docs/main/manifests/samples/httpbin/httpbin.yaml -n httpbin

创建独立的 Ingress Controller

接来下就是为命名空间 httpbin 创建独立的 Ingress Controller。

kubectl apply -f - <<EOF
apiVersion: flomesh.io/v1alpha1
kind: NamespacedIngress
metadata:
  name: namespaced-ingress-httpbin
  namespace: httpbin
spec:
  serviceType: LoadBalancer
  http:
    port:
      name: http
      port: 81
      nodePort: 30081
  resources:
    limits:
      cpu: 500m
      memory: 200Mi
    requests:
      cpu: 100m
      memory: 20Mi
EOF

执行完上面的命令之后,在命名空间 httpbin 下会看到有 Ingress Controller 成功运行。

kubectl get po -n httpbin -l app=fsm-ingress-pipy
NAME                                        READY   STATUS    RESTARTS   AGE
fsm-ingress-pipy-httpbin-7ff774cd98-vl5v8   1/1     Running   0          15s

此时,该命名空间下还有对应的 Service

kubectl get svc -n httpbin -l app.kubernetes.io/component=controller
NAME                       TYPE           CLUSTER-IP    EXTERNAL-IP   PORT(S)        AGE
fsm-ingress-pipy-httpbin   LoadBalancer   10.43.86.31   10.0.0.12     81:30081/TCP   27s

有了 Ingress Controller 之后,就是创建 Ingress 资源了。

kubectl apply -f - <<EOF
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: httpbin
  namespace: httpbin
spec:
  ingressClassName: pipy
  rules:
  - host: httpbin.org
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: httpbin
            port:
              number: 14001
EOF

测试

前面检查 Ingress Controller 的时候,可以看到其外部 IP 地址为 192.168.1.11,端口为 81

export HOST_IP=10.0.0.12
curl -sI http://$HOST_IP:81/get -H "Host: httpbin.org"
HTTP/1.1 200 OK
server: gunicorn/19.9.0
date: Tue, 31 Jan 2023 11:09:20 GMT
content-type: application/json
content-length: 244
access-control-allow-origin: *
access-control-allow-credentials: true
connection: keep-alive

总结

多租户的 Ingress Controller 在云环境中,尤其是复杂组织的系统中非常使用,做到了配置和组件的双重隔离。本篇演示的是简单应用的 controller 隔离,对于服务网格的环境下使用方法相同,有兴趣的同学可以尝试一下。

标签:kubectl,Ingress,httpbin,租户,fsm,Flomesh,Controller
From: https://blog.51cto.com/u_15923771/6035804

相关文章

  • k8s部署nginx-ingress
    Kubernetes暴露服务的有三种方式,分别为LoadBlancerService、NodePortService、Ingress。官网对Ingress的定义为管理对外服务到集群内服务之间规则的集合,通俗点讲就是......
  • SpinrgBoot + MybatisPlus 多租户整合
     关于SpringBoot 整合mybatisPlus多租户的一点小实践。https://github.com/doudou20188/mybatisPlus_TenantIdManager简易项目,自行拉取参考。上代码,蛮简单的,其实就......
  • Mongodb多租户功能实现
    importcom.mongodb.client.MongoClient;importcom.mongodb.client.MongoDatabase;importlombok.extern.slf4j.Slf4j;importorg.springframework.data.mongodb.core......
  • SAAS化架构多租户数据如何存储
    昨天沟通一个SAAS化架构多租户数据如何存储,这个问题讨论的很激烈,最后经过多位大牛的经验,总结出3种方式,采用哪种情况还是根据场景评估下:1、分库分表、表名带租户号,开发的时......
  • Ingress和Egress
    IstioGatewayIstio采用了一种新的模型——IstioGateway来代替Kubernetes中的Ingress资源类型。Gateway允许外部流量访问内部服务,只需要配置流量转发即可。创建......
  • 每天一点基础K8S--使用基础ingress进行灰度发布
    利用ingress实现灰度发布1、背景ingress可以实现七层负载,可以根据请求header不同将流量代理到后端不同的service服务。比如:后端网站进行了更新,为了不全网更换,可以利用i......
  • kubernetes安装ingress-nginx的步骤
    kubernetes安装ingress-nginx的步骤系统版本:CentOs8.1k8s版本:v1.21.3containerd版本:ctrcontainerd.io1.4.3一:准备yaml文件github仓库地址:wgethttps://raw.githubuse......
  • 基于AWS云SaaS多租户架构设计
    基于AWS云SaaS多租户架构设计租户与用户概念单租户与多租户多租户的好处采用多租户架构方法将为你的SaaS应用程序带来广泛的有价值的好处。让我们来看看下面的贡献。a)......
  • kubernetes v1.24.0安装ingress
    环境kubernetesv1.24.0ingress:controller:v1.1.2Ingress-nginx官网https://kubernetes.github.io/ingress-nginx/获取deploy.yaml文件kubectlapply-fhttps://r......
  • 从 Nginx Ingress 窥探云原生网关选型
    现今有越来越多的企业开始采纳云原生理念进行应用架构转型。而K8s和微服务是云原生的两大支柱,随着云原生浪潮而被广泛应用。 对多数应用而言,提供对外服务的使命并不......