【问题标题】:Kubernetes deployment style for multiple Ingresses on the same hostname. Are split configurations and single configuration equivalent?同一主机名上多个 Ingress 的 Kubernetes 部署样式。拆分配置和单一配置是否等效?
【发布时间】:2021-08-11 20:02:21
【问题描述】:

我有两个应用程序:app1app2。每个都托管在单独的存储库中。每一个都彼此完全无关。我想:

  1. 从相同的主机名为它们提供服务,只是在不同的路径上。
  2. 每个应用程序都相互独立,它们的部署脚本也是如此。

我目前的方法是为每个应用程序创建一个yaml 文件,描述DeploymentServiceIngress。我正在使用 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.yamlapp2.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

假设我以后要添加越来越多的应用程序app3app4等等。

我的问题是: 这两种规范风格是等价的,还是出于技术或最佳实践原因而首选的一种风格?

【问题讨论】:

  • 使用多个资源,我可以说拥有许多 Ingress 资源对我来说更容易,因为在需要时我可以快速找到合适的资源,但如果您不使用 helm 或 kustomize(或类似的东西)更改所有资源中的注释并不容易,所以你的电话。

标签: nginx kubernetes


【解决方案1】:

您的问题完全基于意见,不可能给出明确的答案。

根据我的经验,最好为每个服务使用入口。对于更长的时间,它很舒服 - 想象有一天您需要在与一个特定服务或一组服务相关的入口中添加/更改一些注释 - 您需要将入口分成几个文件。它会造成混乱。这就是为什么最好将入口定义分开 - 特别是您将应用托管在不同的存储库中。

还要检查这个question(这是关于主机,而不是路径,但它与您的问题非常相似)。您可以在这里找到许多有用的信息。

【讨论】:

    猜你喜欢
    • 2021-04-08
    • 1970-01-01
    • 2013-06-14
    • 1970-01-01
    • 1970-01-01
    • 2021-09-04
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    相关资源
    最近更新 更多