簡體   English   中英

Kustomize 如何只替換 Ingress 配置中的主機

[英]Kustomize how to replace only the host in Ingress configuration

我有這個 ingress.yaml 基本配置:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  labels:
    sia: aza
    app: asap-ingress-internal
  name: asap-ingress-internal
  annotations:
    kubernetes.io/ingress.class: "nginx-external"
    nginx.ingress.kubernetes.io/use-regex: "true"
spec:
  rules:
    - host: the-host-value
      http:
        paths:
          - path: /asap-srv-template/(.*)
            backend:
              serviceName: asap-srv-template
              servicePort: 8080

並且只想替換 spoec.rules.host 值(並保持所有 http.paths 原樣。

所以我創建了一個 env-var.yaml ,如下所示:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: asap-ingress-internal
spec:
  rules:
    - host: the.real.hostname

但結果如下:

$ kustomize build
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: nginx-external
    nginx.ingress.kubernetes.io/use-regex: "true"
  labels:
    app: asap-ingress-internal
    env: dev
    sia: aza
  name: asap-ingress-internal
  namespace: aza-72461-dev
spec:
  rules:
  - host: the.real.hostname

我丟失了所有 http.paths 配置,我不知道該怎么做。

我嘗試使用 patch: 或 kustomization.yaml 中的 patchStrategicMerge 但結果始終相同。

任何幫助將不勝感激

您可以為此使用 json 補丁,下面是一個示例。

這是一個示例kustomization.yaml 它會在patches部分調出一個補丁:

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

resources:
- ../../base/app1

patches:
- target:
    kind: Ingress
    name: my-ingress
  path: ingress-patch.json  

這是一個示例ingress-patch.json

[
    { 
        "op": "replace", 
        "path": "/spec/rules/0/host", 
        "value": "the.real.hostname"
    }
]

另一種選擇是做內聯補丁。 這與 mroma 提供的方法相同,但沒有文件。 我覺得更簡單。

# kustomization.yaml

resources:
  - ingress.yaml
patches:
  - target:
      kind: Ingress
      name: asap-ingress-internal
    patch: |-
      - op: replace
        path: /spec/rules/0/host
        value: the.real.hostname

如果您使用的是最新版本的 kubernetes(我認為從 18 開始),Ingres api 版本不再是 beta 版本apiVersion: extensions/v1beta1現在是apiVersion: networking.k8s.io/v1

我已經測試了下面的示例並且它有效:

ingress.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: asap-ingress-internal
  annotations:
    kubernetes.io/ingress.class: "nginx-external"
    nginx.ingress.kubernetes.io/use-regex: "true"
spec:
  rules:
    - host: the-host-value
      http:
        paths:
          - path: /asap-srv-template/(.*)
            backend:
              serviceName: asap-srv-template
              servicePort: 8080

ingress-patch.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: asap-ingress-internal
spec:
  rules:
    - host: the.real.hostname

kustomization.yaml

resources:
- ingress.yaml
patchesStrategicMerge:
- ingress-patch.yaml

使用kubectl kustomize (kubectl 版本為v1.19.7 )和kustomize build (獨立 kustomize 版本為v3.5.4 )測試

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM