使用 kustomize overlays 替换 gke ingress 的多个主机
Replace multiple hosts of gke ingress using kustomize overlays
我有一个 GKE/GCE 入口文件,其中有 2 个主机。
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: my-ingress
spec:
rules:
- host: myfirstdomain # <-------- override this via kustomize
http:
paths:
- path: /abc
backend:
serviceName: abc
servicePort: abc
- path: /def
backend:
serviceName: def
servicePort: def
- path: /ghi
backend:
serviceName: ghi
servicePort: ghi
- host: myseconddomain # <-------- override this via kustomize
http:
paths:
- backend:
serviceName: xyz
servicePort: xyz
我想通过 kustomize 声明 host
值,以便我可以为不同的环境指定不同的 host
值。
我的开发环境覆盖补丁文件如下所示:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: my-ingress
spec:
rules:
- host: dev1.example.com
- host: dev2.example.com
然而,运行 kustomize build overlays/dev
的输出如下所示:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: my-ingress
spec:
rules:
- host: dev1.example.com
- host: dev2.example.com
所有其他规格都丢失了。
它最终替换了 整个 host
块,而不是仅替换 host
行。
我该如何解决这个问题?我正在使用:
- kustomize 版本
v4.1.2
- kubectl版本
v1.21.0
您不能使用 strategic merge since the spec.rules
is an array of items. You have to use json merge 通过提供要受影响的确切路径来做到这一点。
您可以为 json 合并创建单独的补丁文件,如下所示:
# overlays/dev/ingress-json-patch.yaml
- op: replace
path: /spec/rules/0/host
value: dev1.example.com
- op: replace
path: /spec/rules/1/host
value: dev2.example.com
然后通过将以下内容添加到您的 kustomization.yaml
来引用该补丁文件:
# overlays/dev/kustomization.yaml
patchesJson6902:
- target:
group: extensions
version: v1beta1
kind: Ingress
name: my-ingress
path: overlays/dev/ingress-json-patch.yaml
我有一个 GKE/GCE 入口文件,其中有 2 个主机。
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: my-ingress
spec:
rules:
- host: myfirstdomain # <-------- override this via kustomize
http:
paths:
- path: /abc
backend:
serviceName: abc
servicePort: abc
- path: /def
backend:
serviceName: def
servicePort: def
- path: /ghi
backend:
serviceName: ghi
servicePort: ghi
- host: myseconddomain # <-------- override this via kustomize
http:
paths:
- backend:
serviceName: xyz
servicePort: xyz
我想通过 kustomize 声明 host
值,以便我可以为不同的环境指定不同的 host
值。
我的开发环境覆盖补丁文件如下所示:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: my-ingress
spec:
rules:
- host: dev1.example.com
- host: dev2.example.com
然而,运行 kustomize build overlays/dev
的输出如下所示:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: my-ingress
spec:
rules:
- host: dev1.example.com
- host: dev2.example.com
所有其他规格都丢失了。
它最终替换了 整个 host
块,而不是仅替换 host
行。
我该如何解决这个问题?我正在使用:
- kustomize 版本
v4.1.2
- kubectl版本
v1.21.0
您不能使用 strategic merge since the spec.rules
is an array of items. You have to use json merge 通过提供要受影响的确切路径来做到这一点。
您可以为 json 合并创建单独的补丁文件,如下所示:
# overlays/dev/ingress-json-patch.yaml
- op: replace
path: /spec/rules/0/host
value: dev1.example.com
- op: replace
path: /spec/rules/1/host
value: dev2.example.com
然后通过将以下内容添加到您的 kustomization.yaml
来引用该补丁文件:
# overlays/dev/kustomization.yaml
patchesJson6902:
- target:
group: extensions
version: v1beta1
kind: Ingress
name: my-ingress
path: overlays/dev/ingress-json-patch.yaml