【发布时间】:2021-08-11 20:02:21
【问题描述】:
我有两个应用程序:app1 和 app2。每个都托管在单独的存储库中。每一个都彼此完全无关。我想:
- 从相同的主机名为它们提供服务,只是在不同的路径上。
- 每个应用程序都相互独立,它们的部署脚本也是如此。
我目前的方法是为每个应用程序创建一个yaml 文件,描述Deployment、Service 和Ingress。我正在使用 nginx 来管理入口部分。
app1.yaml 包含以下 Ingress 规范:
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: app1-ingress
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/proxy-read-timeout: "1800"
nginx.ingress.kubernetes.io/proxy-send-timeout: "1800"
nginx.ingress.kubernetes.io/rewrite-target: /$2
nginx.ingress.kubernetes.io/configuration-snippet: |
rewrite ^(/apps/app1)$ $1/ redirect; # ZZZ
spec:
rules:
- host: myhost
http:
paths:
- path: /apps/app1(/?)(.*)
backend:
serviceName: app1-service
servicePort: 8080
app2.yaml 包含完全相同的内容,但相应的条目已更改。
当我想部署 app1 时,我会进入它的 repo 并执行以下操作:
kubectl apply -f app1.yaml
当我想部署 app2 时,我会进入它的 repo 并执行以下操作:
kubectl apply -f app2.yaml
另一种方法是让app1.yaml 和app2.yaml 只定义服务,然后有一个包含入口规范的附加文件:
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: ingress
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/proxy-read-timeout: "1800"
nginx.ingress.kubernetes.io/proxy-send-timeout: "1800"
nginx.ingress.kubernetes.io/rewrite-target: /$2
nginx.ingress.kubernetes.io/configuration-snippet: |
rewrite ^(/apps/.*)$ $1/ redirect; # ZZZ
spec:
rules:
- host: myhost
http:
paths:
- path: /apps/app1(/?)(.*)
backend:
serviceName: app1-service
servicePort: 8080
paths:
- path: /apps/app2(/?)(.*)
backend:
serviceName: app2-service
servicePort: 8080
假设我以后要添加越来越多的应用程序app3、app4等等。
我的问题是: 这两种规范风格是等价的,还是出于技术或最佳实践原因而首选的一种风格?
【问题讨论】:
-
使用多个资源,我可以说拥有许多 Ingress 资源对我来说更容易,因为在需要时我可以快速找到合适的资源,但如果您不使用 helm 或 kustomize(或类似的东西)更改所有资源中的注释并不容易,所以你的电话。
标签: nginx kubernetes