使用kustomize覆盖替换多个gke入口主机
我有一个 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
我想host通过 kustomize声明这些值,以便我可以host为不同的环境指定不同的值。
我的开发环境覆盖补丁文件如下所示:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: my-ingress
spec:
rules:
- host: dev1.example.com
- host: dev2.example.com
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如下所示:
所有其他规格都丢失了。
它最终替换整个 host块而不是只替换host行。
我该如何解决这个问题?我在用:
- 自定义版本
v4.1.2 - kubectl版本
v1.21.0
回答
您不能使用战略合并来做到这一点,因为它spec.rules是一组项目。您必须通过提供要受影响的确切路径来使用json 合并。
您可以为 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