这是我正在尝试修补的 ingress.yaml 文件。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: notesapp-ingress
namespace: default
annotations:
kubernetes.io/ingress.class: addon-http-application-routing
cert-manager.io/cluster-issuer: letsencrypt
nginx.ingress.kubernetes.io/proxy-body-size: 100m
cert-manager.io/issue-temporary-certificate: "true"
acme.cert-manager.io/http01-edit-in-place: "true"
spec:
tls:
- hosts:
- notesapp.plan.com
secretName: tls-secret
rules:
- host: notesapp.plan.com
http:
paths:
- backend:
service:
name: notesapp-service
port:
number: 4000
path: /
pathType: Prefix
我想将 spec.tls[0].hosts url 修补为自定义 url 并按如下方式修补。 这是 ingress-patch.yaml 文件。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: notesapp-ingress
namespace: default
spec:
tls:
- hosts:
- staging.notesapp.plan.com
rules:
- host: staging.notesapp.plan.com
但是在 Flux 协调了这个补丁之后,我看到了这个错误。
这里,看。
kubectl 描述入口笔记app-ingress
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning BadConfig 54m (x2 over 55m) cert-manager-ingress-shim Skipped a TLS block: spec.tls[0].secretName: Required value
Normal Sync 54m (x2 over 55m) nginx-ingress-controller Scheduled for sync
看起来spec.tls[0]元素被我的补丁完全替换,而不是只修补spec.tls[0].hosts。 如何只修补spec.tls[0].hosts?
问题: 想象一下spec.tls[0]对象中有许多其他键值(就像我想修补spec.rules[0].host时一样)。那么就会造成代码重复。 例如,当我修补spec.rules[0].host值时,我必须添加此代码,这对我来说不是必需的。
http:
paths:
- backend:
service:
name: notesapp-service
port:
number: 4000
path: /
pathType: Prefix
您当前正在替换列表,而不仅仅是单个项目。
您可以使用补丁替换操作来目标列表项替换,与删除或添加等其他操作混合时要小心,因为在这种情况下索引可能会发生变化!
---
# yaml-language-server: $schema=https://json.schemastore.org/kustomization
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ingress.yaml
patches:
- patch: |
- op: replace
path: /spec/tls/0/hosts/0
value: staging.notesapp.plan.com
- op: replace
path: /spec/rules/0/host
value: staging.notesapp.plan.com
target:
kind: Ingress
version: v1
name: notesapp-ingress
由于 Flux kustomization 在底层使用 kustomize,您也可以将其添加到 Flux kustomization 中。