Iva*_*anR 4 subdomain dns saas kubernetes
我正在开发一个将在 Kubernetes 中运行的 SaaS 应用程序。我们使用 Helm 图表将所有组件部署到集群中(为简单起见,我们假设它是前端服务、后端和数据库)。应用程序架构是多租户的(我们的每个服务都有一个由所有租户共享的实例),我们希望保持这种方式。我目前正在努力解决并想寻求建议/最佳实践的是,如何为租户自动配置自定义子域?
想象一下该应用程序托管在exampleapp.com。一个全新的客户来了并注册了一个新的组织some-company。此时,除了在系统中创建新租户之外,我还想配置一个新的子域some-company.exampleapp.com。我希望此配置自动完成,不需要任何手动干预。
exampleapp.com融入该解决方案?它是否必须提供用于动态 DNS 记录创建/修改的 API?我很高兴我提出的问题非常广泛,所以我不期望任何比高级概念答案或指向一些可能帮助我实现这一目标的服务/库/工具的指针。
注意:由于这更多是一个理论问题,我将向您提供 Kubernetes 工程师的一些观点,我将您的问题分成几个部分以方便理解。
问题一:
想象一下该应用程序托管在
exampleapp.com。一个全新的客户来了并注册了一个新的组织some-company。此时,除了在系统中创建新租户之外,我还想配置一个新的子域some-company.exampleapp.com。我希望此配置自动完成,不需要任何手动干预。
建议:
kubectl patch是更简单的解决方案。对于这种方法,我建议安装Nginx Ingress Controller,因为它具有多功能性。
这是一个例子:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: <ingress-name>
spec:
rules:
- host: client1.exampleapp.com
http:
paths:
- path: /client1
backend:
serviceName: <main-service>
servicePort: <main-service-port>
- host: client2.exampleapp.com
http:
paths:
- path: /client2
backend:
serviceName: <main-service>
servicePort: <main-service-port>
Run Code Online (Sandbox Code Playgroud)
kubectl patch这是用于添加新规则的一行命令:kubectl patch ingress demo-ingress --type "json" -p '[{"op":"add","path":"/spec/rules/-","value":{"host":"client3.exampleapp.com","http":{"paths":[{"path":"/client3","backend":{"serviceName":"main-service","servicePort":80}}]}}}]'
Run Code Online (Sandbox Code Playgroud)
概念验证:
$ kubectl get ingress
NAME HOSTS ADDRESS PORTS AGE
demo-ingress client1.exampleapp.com,client2.exampleapp.com 192.168.39.39 80 15m
$ kubectl patch ingress demo-ingress --type "json" -p '[{"op":"add","path":"/spec/rules/-","value":{"host":"client3.exampleapp.com","http":{"paths":[{"path":"/client3","backend":{"serviceName":"main-service","servicePort":80}}]}}}]'
ingress.extensions/demo-ingress patched
$ kubectl describe ingress demo-ingress
Rules:
Host Path Backends
---- ---- --------
client1.exampleapp.com
/client1 main-service:80 (<none>)
client2.exampleapp.com
/client2 main-service:80 (<none>)
client3.exampleapp.com
/client3 main-service:80 (<none>)
Run Code Online (Sandbox Code Playgroud)
此规则将从子域传入的流量重定向到主应用程序内的子路径。
问题2 :
我们的 ( ) 域名注册商/名称服务器提供商如何
exampleapp.com融入该解决方案?它是否必须提供用于动态 DNS 记录创建/修改的 API?
建议:
*.example.app入口的IP,我不相信你需要更多的东西,因为它将所有内容重定向到入口并且入口转发它内部。问题3:
如果有一些强有力的论据解释为什么多租户 + Kubernetes 不能很好地相处,那么这些论据也是受欢迎的。
观点:
以上就是我对你的问题的2分回答,希望对你有帮助!
| 归档时间: |
|
| 查看次数: |
2066 次 |
| 最近记录: |