很抱歉,如果已经涵盖了这个案例,我读了很多类似的问题/答案,但尽管它们有所帮助,但我还没有找到解决我的pb的方法。
我需要更新我的yaml值文件,以引入一个新的密钥networkpolicy
,并在helmrange
循环中迭代它:
初始value.yaml
文件:
calico:
spec:
egress:
- action: Allow
destination:
selector: app.kubernetes.io/name == 'test'
order: 10
types:
- Egress
spec:
egress:
- action: Allow
destination:
selector: app.kubernetes.io/name == 'test'
order: 10
types:
- Egress
更新的value.yaml
文件:
calico:
networkpolicy:
name: micro-zoning.allow-egress-from-p-to-bitbucket
spec:
egress:
- action: Allow
destination:
selector: app.kubernetes.io/name == 'test'
order: 10
types:
- Egress
networkpolicy:
name: micro-zoning.allow-egress-from-p-to-papi
spec:
egress:
- action: Allow
destination:
selector: app.kubernetes.io/name == 'p-api'
order: 10
types:
- Egress
处理它的掌舵模板是这样的:
{{- if .Values.calico -}}
{{- range .Values.calico.networkpolicy }}
apiVersion: crd.projectcalico.org/v1
kind: NetworkPolicy
metadata:
name: {{ $.Values.calico.networkpolicy.name | default (printf "micro-zoning.%s" (include "test.fullname" $)) }}
{{- include "test.globalMetadata" $ | nindent 2 }}
labels:
projectcalico.org/tier: micro-zoning
spec:
tier: micro-zoning
selector: app.kubernetes.io/name == "{{ include "test.name" $ }}"
{{- with $.Values.calico.networkpolicy.spec }}
{{- toYaml . | nindent 2 }}
{{- end }}
---
{{- end }}
{{- end }}
它迭代两次(如预期(,但生成的模板是相同的,即只打印第二个字典中的数据:
---
apiVersion: crd.projectcalico.org/v1
kind: NetworkPolicy
metadata:
name: micro-zoning.allow-egress-from-p-to-api
namespace: test
labels:
projectcalico.org/tier: micro-zoning
spec:
tier: micro-zoning
selector: app.kubernetes.io/name == "test"
egress:
- action: Allow
destination:
selector: app.kubernetes.io/name == 'p-api'
order: 10
types:
- Egress
---
apiVersion: crd.projectcalico.org/v1
kind: NetworkPolicy
metadata:
name: micro-zoning.allow-egress-from-p-to-api
namespace: test
labels:
projectcalico.org/tier: micro-zoning
spec:
tier: micro-zoning
selector: app.kubernetes.io/name == "test"
egress:
- action: Allow
destination:
selector: app.kubernetes.io/name == 'p-api'
order: 10
types:
- Egress
---
你知道发生了什么吗?我想我的value.yaml
文件的格式有问题,但我真的不知道是什么。
这可能是由作用域引起的。
$
表示值的根。
在范围循环中,应该使用.
来表示当前元素。
模板
{{- if .Values.calico -}}
{{- range .Values.calico }}
apiVersion: crd.projectcalico.org/v1
kind: NetworkPolicy
metadata:
name: {{ .name | default (printf "micro-zoning.%s" (include "test.fullname" $)) }}
labels:
projectcalico.org/tier: micro-zoning
spec:
tier: micro-zoning
selector: app.kubernetes.io/name == "{{ include "test.name" $ }}"
{{- with .networkpolicy.spec }}
{{- toYaml . | nindent 2 }}
{{- end }}
---
{{- end }}
{{- end }}
输出:
---
# Source: test/templates/calico.yaml
apiVersion: crd.projectcalico.org/v1
kind: NetworkPolicy
metadata:
name: micro-zoning.test
labels:
projectcalico.org/tier: micro-zoning
spec:
tier: micro-zoning
selector: app.kubernetes.io/name == "test"
egress:
- action: Allow
destination:
selector: app.kubernetes.io/name == 'test'
order: 10
types:
- Egress
---
# Source: test/templates/calico.yaml
apiVersion: crd.projectcalico.org/v1
kind: NetworkPolicy
metadata:
name: micro-zoning.test
labels:
projectcalico.org/tier: micro-zoning
spec:
tier: micro-zoning
selector: app.kubernetes.io/name == "test"
egress:
- action: Allow
destination:
selector: app.kubernetes.io/name == 'p-api'
order: 10
types:
- Egress
---
Ps:values.yaml
有您提供的一些语法错误。
地图中不可能有两个相同的关键点。您应该将它们写在数组中以符合语法。像这样:
初始value.yaml
文件:
calico:
- spec:
egress:
- action: Allow
destination:
selector: app.kubernetes.io/name == 'test'
order: 10
types:
- Egress
- spec:
egress:
- action: Allow
destination:
selector: app.kubernetes.io/name == 'test'
order: 10
types:
- Egress
更新的value.yaml
文件:
calico:
- networkpolicy:
name: micro-zoning.allow-egress-from-p-to-bitbucket
spec:
egress:
- action: Allow
destination:
selector: app.kubernetes.io/name == 'test'
order: 10
types:
- Egress
- networkpolicy:
name: micro-zoning.allow-egress-from-p-to-papi
spec:
egress:
- action: Allow
destination:
selector: app.kubernetes.io/name == 'p-api'
order: 10
types:
- Egress
我终于解决了这个问题。我对yaml只有很少的经验,并且犯了一些语法错误。
最终的yaml配置文件现在看起来是这样的:
calico:
networkPolicy:
- name: networkpolicy1
spec:
selector: test
egress:
- action: Allow
destination:
selector: app.kubernetes.io/name == 'chartname'
order: 10
types:
- Egress
- name: networkpolicy2
spec:
selector: chartname
egress:
- action: Allow
destination:
selector: app.kubernetes.io/name == 'test2'
order: 10
types:
- Egress
和掌舵模板处理它看起来像这样:
{{- if .Values.calico -}}
{{- range .Values.calico.networkPolicy }}
apiVersion: crd.projectcalico.org/v1
kind: NetworkPolicy
metadata:
name: {{ .name | default (printf "micro-zoning.%s" (include "chartname.fullname" $)) }}
{{- include "chartname.globalMetadata" $ | nindent 2 }}
labels:
projectcalico.org/tier: micro-zoning
spec:
tier: micro-zoning
selector: app.kubernetes.io/name == {{ .spec.selector | default ((include "chartname.name" $)) }}
{{- with .spec }}
{{- toYaml . | nindent 2 }}
{{- end }}
---
{{- end }}
{{- end }}
注意:这个yaml教程有帮助。