This is an automated email from the ASF dual-hosted git repository.
jscheffl pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow.git
The following commit(s) were added to refs/heads/main by this push:
new 89efec77305 Add ipFamilyPolicy and ipFamilies support to all Helm
service templates (#66616)
89efec77305 is described below
commit 89efec77305a8179850e1e636e58af90cfdc6f16
Author: Tung Huynh <[email protected]>
AuthorDate: Sun Jun 7 02:08:31 2026 -0700
Add ipFamilyPolicy and ipFamilies support to all Helm service templates
(#66616)
* Add ipFamilyPolicy and ipFamilies support to all Helm service templates
Agent-Logs-Url:
https://github.com/huynhsontung/airflow/sessions/be394b63-9852-4a0f-a4b9-6d9e14c14f29
Co-authored-by: huynhsontung
<[email protected]>
* Consolidate ipFamilyPolicy/ipFamilies into top-level Helm chart fields
* remove unnecessary new lines in values
* Fix otel collector test
Co-authored-by: Copilot Autofix powered by AI
<[email protected]>
---------
Co-authored-by: copilot-swe-agent[bot]
<[email protected]>
Co-authored-by: Copilot Autofix powered by AI
<[email protected]>
---
chart/templates/api-server/api-server-service.yaml | 6 +++++
chart/templates/flower/flower-service.yaml | 6 +++++
.../otel-collector/otel-collector-service.yaml | 6 +++++
chart/templates/pgbouncer/pgbouncer-service.yaml | 6 +++++
chart/templates/redis/redis-service.yaml | 6 +++++
chart/templates/scheduler/scheduler-service.yaml | 6 +++++
chart/templates/statsd/statsd-service.yaml | 6 +++++
chart/templates/triggerer/triggerer-service.yaml | 6 +++++
chart/templates/workers/worker-service.yaml | 6 +++++
.../helm_tests/airflow_core/test_api_server.py | 20 ++++++++++++++++
.../helm_tests/airflow_core/test_scheduler.py | 22 +++++++++++++++++
.../helm_tests/airflow_core/test_triggerer.py | 24 +++++++++++++++++++
chart/tests/helm_tests/airflow_core/test_worker.py | 22 +++++++++++++++++
.../otel_collector/test_otel_collector.py | 19 +++++++++++++++
chart/tests/helm_tests/other/test_flower.py | 22 +++++++++++++++++
chart/tests/helm_tests/other/test_pgbouncer.py | 22 +++++++++++++++++
chart/tests/helm_tests/other/test_redis.py | 20 ++++++++++++++++
chart/tests/helm_tests/other/test_statsd.py | 26 ++++++++++++++++++++
chart/values.schema.json | 28 ++++++++++++++++++++++
chart/values.yaml | 7 ++++++
20 files changed, 286 insertions(+)
diff --git a/chart/templates/api-server/api-server-service.yaml
b/chart/templates/api-server/api-server-service.yaml
index 5aa34b850dd..2b5bbb9f78c 100644
--- a/chart/templates/api-server/api-server-service.yaml
+++ b/chart/templates/api-server/api-server-service.yaml
@@ -56,4 +56,10 @@ spec:
{{- if .Values.apiServer.service.loadBalancerSourceRanges }}
loadBalancerSourceRanges: {{- toYaml
.Values.apiServer.service.loadBalancerSourceRanges | nindent 4 }}
{{- end }}
+ {{- if .Values.ipFamilyPolicy }}
+ ipFamilyPolicy: {{ .Values.ipFamilyPolicy }}
+ {{- end }}
+ {{- if .Values.ipFamilies }}
+ ipFamilies: {{- toYaml .Values.ipFamilies | nindent 4 }}
+ {{- end }}
{{- end }}
diff --git a/chart/templates/flower/flower-service.yaml
b/chart/templates/flower/flower-service.yaml
index 459ac1f6e65..1866316af22 100644
--- a/chart/templates/flower/flower-service.yaml
+++ b/chart/templates/flower/flower-service.yaml
@@ -56,4 +56,10 @@ spec:
{{- if .Values.flower.service.loadBalancerSourceRanges }}
loadBalancerSourceRanges: {{- toYaml
.Values.flower.service.loadBalancerSourceRanges | nindent 4 }}
{{- end }}
+ {{- if .Values.ipFamilyPolicy }}
+ ipFamilyPolicy: {{ .Values.ipFamilyPolicy }}
+ {{- end }}
+ {{- if .Values.ipFamilies }}
+ ipFamilies: {{- toYaml .Values.ipFamilies | nindent 4 }}
+ {{- end }}
{{- end }}
diff --git a/chart/templates/otel-collector/otel-collector-service.yaml
b/chart/templates/otel-collector/otel-collector-service.yaml
index 9d2ce3debed..329d5e08038 100644
--- a/chart/templates/otel-collector/otel-collector-service.yaml
+++ b/chart/templates/otel-collector/otel-collector-service.yaml
@@ -52,4 +52,10 @@ spec:
protocol: TCP
port: {{ .Values.ports.otelCollectorOtlpHttp }}
targetPort: {{ .Values.ports.otelCollectorOtlpHttp }}
+ {{- if .Values.ipFamilyPolicy }}
+ ipFamilyPolicy: {{ .Values.ipFamilyPolicy }}
+ {{- end }}
+ {{- if .Values.ipFamilies }}
+ ipFamilies: {{- toYaml .Values.ipFamilies | nindent 4 }}
+ {{- end }}
{{- end }}
diff --git a/chart/templates/pgbouncer/pgbouncer-service.yaml
b/chart/templates/pgbouncer/pgbouncer-service.yaml
index 1290abe14a4..411cbff5839 100644
--- a/chart/templates/pgbouncer/pgbouncer-service.yaml
+++ b/chart/templates/pgbouncer/pgbouncer-service.yaml
@@ -56,4 +56,10 @@ spec:
- name: pgb-metrics
protocol: TCP
port: {{ .Values.ports.pgbouncerScrape }}
+ {{- if .Values.ipFamilyPolicy }}
+ ipFamilyPolicy: {{ .Values.ipFamilyPolicy }}
+ {{- end }}
+ {{- if .Values.ipFamilies }}
+ ipFamilies: {{- toYaml .Values.ipFamilies | nindent 4 }}
+ {{- end }}
{{- end }}
diff --git a/chart/templates/redis/redis-service.yaml
b/chart/templates/redis/redis-service.yaml
index 9e39c3d5c15..a7f959eeccd 100644
--- a/chart/templates/redis/redis-service.yaml
+++ b/chart/templates/redis/redis-service.yaml
@@ -55,4 +55,10 @@ spec:
{{- if and (eq .Values.redis.service.type "NodePort") (not (empty
.Values.redis.service.nodePort)) }}
nodePort: {{ .Values.redis.service.nodePort }}
{{- end }}
+ {{- if .Values.ipFamilyPolicy }}
+ ipFamilyPolicy: {{ .Values.ipFamilyPolicy }}
+ {{- end }}
+ {{- if .Values.ipFamilies }}
+ ipFamilies: {{- toYaml .Values.ipFamilies | nindent 4 }}
+ {{- end }}
{{- end }}
diff --git a/chart/templates/scheduler/scheduler-service.yaml
b/chart/templates/scheduler/scheduler-service.yaml
index b9e85adbcb9..87a6658b8f2 100644
--- a/chart/templates/scheduler/scheduler-service.yaml
+++ b/chart/templates/scheduler/scheduler-service.yaml
@@ -45,4 +45,10 @@ spec:
protocol: TCP
port: {{ .Values.ports.workerLogs }}
targetPort: {{ .Values.ports.workerLogs }}
+ {{- if .Values.ipFamilyPolicy }}
+ ipFamilyPolicy: {{ .Values.ipFamilyPolicy }}
+ {{- end }}
+ {{- if .Values.ipFamilies }}
+ ipFamilies: {{- toYaml .Values.ipFamilies | nindent 4 }}
+ {{- end }}
{{- end }}
diff --git a/chart/templates/statsd/statsd-service.yaml
b/chart/templates/statsd/statsd-service.yaml
index c7bee0ea3f4..6520a4b020d 100644
--- a/chart/templates/statsd/statsd-service.yaml
+++ b/chart/templates/statsd/statsd-service.yaml
@@ -55,4 +55,10 @@ spec:
protocol: TCP
port: {{ .Values.ports.statsdScrape }}
targetPort: {{ .Values.ports.statsdScrape }}
+ {{- if .Values.ipFamilyPolicy }}
+ ipFamilyPolicy: {{ .Values.ipFamilyPolicy }}
+ {{- end }}
+ {{- if .Values.ipFamilies }}
+ ipFamilies: {{- toYaml .Values.ipFamilies | nindent 4 }}
+ {{- end }}
{{- end }}
diff --git a/chart/templates/triggerer/triggerer-service.yaml
b/chart/templates/triggerer/triggerer-service.yaml
index f29af89dca7..d9c5415a254 100644
--- a/chart/templates/triggerer/triggerer-service.yaml
+++ b/chart/templates/triggerer/triggerer-service.yaml
@@ -45,4 +45,10 @@ spec:
protocol: TCP
port: {{ .Values.ports.triggererLogs }}
targetPort: {{ .Values.ports.triggererLogs }}
+ {{- if .Values.ipFamilyPolicy }}
+ ipFamilyPolicy: {{ .Values.ipFamilyPolicy }}
+ {{- end }}
+ {{- if .Values.ipFamilies }}
+ ipFamilies: {{- toYaml .Values.ipFamilies | nindent 4 }}
+ {{- end }}
{{- end }}
diff --git a/chart/templates/workers/worker-service.yaml
b/chart/templates/workers/worker-service.yaml
index 45a38d8b793..c1980e92617 100644
--- a/chart/templates/workers/worker-service.yaml
+++ b/chart/templates/workers/worker-service.yaml
@@ -61,6 +61,12 @@ spec:
protocol: TCP
port: {{ .Values.ports.workerLogs }}
targetPort: {{ .Values.ports.workerLogs }}
+ {{- if .Values.ipFamilyPolicy }}
+ ipFamilyPolicy: {{ .Values.ipFamilyPolicy }}
+ {{- end }}
+ {{- if .Values.ipFamilies }}
+ ipFamilies: {{- toYaml .Values.ipFamilies | nindent 4 }}
+ {{- end }}
{{- end }}
{{- end }}
{{- end }}
diff --git a/chart/tests/helm_tests/airflow_core/test_api_server.py
b/chart/tests/helm_tests/airflow_core/test_api_server.py
index 79d38849939..e6cc131e763 100644
--- a/chart/tests/helm_tests/airflow_core/test_api_server.py
+++ b/chart/tests/helm_tests/airflow_core/test_api_server.py
@@ -741,6 +741,26 @@ class TestAPIServerService:
assert len(docs) == 0
+ def test_ip_family_policy(self):
+ docs = render_chart(
+ values={
+ "ipFamilyPolicy": "PreferDualStack",
+ "ipFamilies": ["IPv4", "IPv6"],
+ },
+ show_only=["templates/api-server/api-server-service.yaml"],
+ )
+
+ assert jmespath.search("spec.ipFamilyPolicy", docs[0]) ==
"PreferDualStack"
+ assert jmespath.search("spec.ipFamilies", docs[0]) == ["IPv4", "IPv6"]
+
+ def test_ip_family_policy_not_set_by_default(self):
+ docs = render_chart(
+ show_only=["templates/api-server/api-server-service.yaml"],
+ )
+
+ assert jmespath.search("spec.ipFamilyPolicy", docs[0]) is None
+ assert jmespath.search("spec.ipFamilies", docs[0]) is None
+
class TestAPIServerNetworkPolicy:
"""Tests api-server network policy."""
diff --git a/chart/tests/helm_tests/airflow_core/test_scheduler.py
b/chart/tests/helm_tests/airflow_core/test_scheduler.py
index 140bb5153ac..45f8dfd91f0 100644
--- a/chart/tests/helm_tests/airflow_core/test_scheduler.py
+++ b/chart/tests/helm_tests/airflow_core/test_scheduler.py
@@ -1089,6 +1089,28 @@ class TestSchedulerService:
assert "executor" in jmespath.search("metadata.labels", docs[0])
assert jmespath.search("metadata.labels", docs[0])["executor"] ==
expected_label
+ def test_ip_family_policy(self):
+ docs = render_chart(
+ values={
+ "executor": "LocalExecutor",
+ "ipFamilyPolicy": "PreferDualStack",
+ "ipFamilies": ["IPv4", "IPv6"],
+ },
+ show_only=["templates/scheduler/scheduler-service.yaml"],
+ )
+
+ assert jmespath.search("spec.ipFamilyPolicy", docs[0]) ==
"PreferDualStack"
+ assert jmespath.search("spec.ipFamilies", docs[0]) == ["IPv4", "IPv6"]
+
+ def test_ip_family_policy_not_set_by_default(self):
+ docs = render_chart(
+ values={"executor": "LocalExecutor"},
+ show_only=["templates/scheduler/scheduler-service.yaml"],
+ )
+
+ assert jmespath.search("spec.ipFamilyPolicy", docs[0]) is None
+ assert jmespath.search("spec.ipFamilies", docs[0]) is None
+
class TestSchedulerServiceAccount:
"""Tests scheduler service account."""
diff --git a/chart/tests/helm_tests/airflow_core/test_triggerer.py
b/chart/tests/helm_tests/airflow_core/test_triggerer.py
index a1ecd6763f9..85643149de8 100644
--- a/chart/tests/helm_tests/airflow_core/test_triggerer.py
+++ b/chart/tests/helm_tests/airflow_core/test_triggerer.py
@@ -740,6 +740,30 @@ class TestTriggerer:
}
+class TestTriggererService:
+ """Tests triggerer service."""
+
+ def test_ip_family_policy(self):
+ docs = render_chart(
+ values={
+ "ipFamilyPolicy": "PreferDualStack",
+ "ipFamilies": ["IPv4", "IPv6"],
+ },
+ show_only=["templates/triggerer/triggerer-service.yaml"],
+ )
+
+ assert jmespath.search("spec.ipFamilyPolicy", docs[0]) ==
"PreferDualStack"
+ assert jmespath.search("spec.ipFamilies", docs[0]) == ["IPv4", "IPv6"]
+
+ def test_ip_family_policy_not_set_by_default(self):
+ docs = render_chart(
+ show_only=["templates/triggerer/triggerer-service.yaml"],
+ )
+
+ assert jmespath.search("spec.ipFamilyPolicy", docs[0]) is None
+ assert jmespath.search("spec.ipFamilies", docs[0]) is None
+
+
class TestTriggererServiceAccount:
"""Tests triggerer service account."""
diff --git a/chart/tests/helm_tests/airflow_core/test_worker.py
b/chart/tests/helm_tests/airflow_core/test_worker.py
index 7d604cc87cc..e66a8713510 100644
--- a/chart/tests/helm_tests/airflow_core/test_worker.py
+++ b/chart/tests/helm_tests/airflow_core/test_worker.py
@@ -2784,6 +2784,28 @@ class TestWorkerService:
assert labels["test_label"] == "test_label_value"
assert "key" not in labels
+ def test_ip_family_policy(self):
+ docs = render_chart(
+ values={
+ "executor": "CeleryExecutor",
+ "ipFamilyPolicy": "PreferDualStack",
+ "ipFamilies": ["IPv4", "IPv6"],
+ },
+ show_only=["templates/workers/worker-service.yaml"],
+ )
+
+ assert jmespath.search("spec.ipFamilyPolicy", docs[0]) ==
"PreferDualStack"
+ assert jmespath.search("spec.ipFamilies", docs[0]) == ["IPv4", "IPv6"]
+
+ def test_ip_family_policy_not_set_by_default(self):
+ docs = render_chart(
+ values={"executor": "CeleryExecutor"},
+ show_only=["templates/workers/worker-service.yaml"],
+ )
+
+ assert jmespath.search("spec.ipFamilyPolicy", docs[0]) is None
+ assert jmespath.search("spec.ipFamilies", docs[0]) is None
+
class TestWorkerCeleryServiceAccount:
@pytest.mark.parametrize(
diff --git a/chart/tests/helm_tests/otel_collector/test_otel_collector.py
b/chart/tests/helm_tests/otel_collector/test_otel_collector.py
index b7d84347fb9..66cb5c58ec8 100644
--- a/chart/tests/helm_tests/otel_collector/test_otel_collector.py
+++ b/chart/tests/helm_tests/otel_collector/test_otel_collector.py
@@ -400,6 +400,25 @@ class TestOtelCollectorService:
docs = render_chart(values={"otelCollector": {"tracesEnabled": True}},
show_only=[SERVICE_TEMPLATE])
assert "annotations" not in jmespath.search("metadata", docs[0])
+ def test_ip_family_policy(self):
+ docs = render_chart(
+ values={
+ "otelCollector": {"tracesEnabled": True},
+ "ipFamilyPolicy": "PreferDualStack",
+ "ipFamilies": ["IPv4", "IPv6"],
+ },
+ show_only=[SERVICE_TEMPLATE],
+ )
+
+ assert jmespath.search("spec.ipFamilyPolicy", docs[0]) ==
"PreferDualStack"
+ assert jmespath.search("spec.ipFamilies", docs[0]) == ["IPv4", "IPv6"]
+
+ docs = render_chart(
+ values={"otelCollector": {"tracesEnabled": True}},
+ show_only=[SERVICE_TEMPLATE],
+ )
+ assert jmespath.search("spec.ipFamilies", docs[0]) is None
+
class TestOtelCollectorServiceAccount:
def test_default_create(self):
diff --git a/chart/tests/helm_tests/other/test_flower.py
b/chart/tests/helm_tests/other/test_flower.py
index a9bf518aed8..915dbb76587 100644
--- a/chart/tests/helm_tests/other/test_flower.py
+++ b/chart/tests/helm_tests/other/test_flower.py
@@ -573,6 +573,28 @@ class TestFlowerService:
assert "test_label" in jmespath.search("metadata.labels", docs[0])
assert jmespath.search("metadata.labels", docs[0])["test_label"] ==
"test_label_value"
+ def test_ip_family_policy(self):
+ docs = render_chart(
+ values={
+ "flower": {"enabled": True},
+ "ipFamilyPolicy": "PreferDualStack",
+ "ipFamilies": ["IPv4", "IPv6"],
+ },
+ show_only=["templates/flower/flower-service.yaml"],
+ )
+
+ assert jmespath.search("spec.ipFamilyPolicy", docs[0]) ==
"PreferDualStack"
+ assert jmespath.search("spec.ipFamilies", docs[0]) == ["IPv4", "IPv6"]
+
+ def test_ip_family_policy_not_set_by_default(self):
+ docs = render_chart(
+ values={"flower": {"enabled": True}},
+ show_only=["templates/flower/flower-service.yaml"],
+ )
+
+ assert jmespath.search("spec.ipFamilyPolicy", docs[0]) is None
+ assert jmespath.search("spec.ipFamilies", docs[0]) is None
+
class TestFlowerNetworkPolicy:
"""Tests flower network policy."""
diff --git a/chart/tests/helm_tests/other/test_pgbouncer.py
b/chart/tests/helm_tests/other/test_pgbouncer.py
index 2219d2f0ca1..4b2530cf2de 100644
--- a/chart/tests/helm_tests/other/test_pgbouncer.py
+++ b/chart/tests/helm_tests/other/test_pgbouncer.py
@@ -108,6 +108,28 @@ class TestPgbouncer:
assert jmespath.search("spec.clusterIP", docs[0]) == "10.10.10.10"
+ def test_pgbouncer_service_ip_family_policy(self):
+ docs = render_chart(
+ values={
+ "pgbouncer": {"enabled": True},
+ "ipFamilyPolicy": "PreferDualStack",
+ "ipFamilies": ["IPv4", "IPv6"],
+ },
+ show_only=["templates/pgbouncer/pgbouncer-service.yaml"],
+ )
+
+ assert jmespath.search("spec.ipFamilyPolicy", docs[0]) ==
"PreferDualStack"
+ assert jmespath.search("spec.ipFamilies", docs[0]) == ["IPv4", "IPv6"]
+
+ def test_pgbouncer_service_ip_family_policy_not_set_by_default(self):
+ docs = render_chart(
+ values={"pgbouncer": {"enabled": True}},
+ show_only=["templates/pgbouncer/pgbouncer-service.yaml"],
+ )
+
+ assert jmespath.search("spec.ipFamilyPolicy", docs[0]) is None
+ assert jmespath.search("spec.ipFamilies", docs[0]) is None
+
@pytest.mark.parametrize(
("revision_history_limit", "global_revision_history_limit"),
[(8, 10), (10, 8), (8, None), (None, 10), (None, None)],
diff --git a/chart/tests/helm_tests/other/test_redis.py
b/chart/tests/helm_tests/other/test_redis.py
index 5d726823d72..842db0cd739 100644
--- a/chart/tests/helm_tests/other/test_redis.py
+++ b/chart/tests/helm_tests/other/test_redis.py
@@ -576,3 +576,23 @@ class TestRedisService:
show_only=["templates/redis/redis-service.yaml"],
)
assert jmespath.search("spec.clusterIP", docs[0]) == "127.0.0.1"
+
+ def test_ip_family_policy(self):
+ docs = render_chart(
+ values={
+ "ipFamilyPolicy": "PreferDualStack",
+ "ipFamilies": ["IPv4", "IPv6"],
+ },
+ show_only=["templates/redis/redis-service.yaml"],
+ )
+
+ assert jmespath.search("spec.ipFamilyPolicy", docs[0]) ==
"PreferDualStack"
+ assert jmespath.search("spec.ipFamilies", docs[0]) == ["IPv4", "IPv6"]
+
+ def test_ip_family_policy_not_set_by_default(self):
+ docs = render_chart(
+ show_only=["templates/redis/redis-service.yaml"],
+ )
+
+ assert jmespath.search("spec.ipFamilyPolicy", docs[0]) is None
+ assert jmespath.search("spec.ipFamilies", docs[0]) is None
diff --git a/chart/tests/helm_tests/other/test_statsd.py
b/chart/tests/helm_tests/other/test_statsd.py
index 6f45d9cd4ec..619851f4b9b 100644
--- a/chart/tests/helm_tests/other/test_statsd.py
+++ b/chart/tests/helm_tests/other/test_statsd.py
@@ -422,6 +422,32 @@ class TestStatsd:
assert expected ==
jmespath.search("spec.template.spec.terminationGracePeriodSeconds", docs[0])
+class TestStatsdService:
+ """Tests statsd service."""
+
+ def test_ip_family_policy(self):
+ docs = render_chart(
+ values={
+ "statsd": {"enabled": True},
+ "ipFamilyPolicy": "PreferDualStack",
+ "ipFamilies": ["IPv4", "IPv6"],
+ },
+ show_only=["templates/statsd/statsd-service.yaml"],
+ )
+
+ assert jmespath.search("spec.ipFamilyPolicy", docs[0]) ==
"PreferDualStack"
+ assert jmespath.search("spec.ipFamilies", docs[0]) == ["IPv4", "IPv6"]
+
+ def test_ip_family_policy_not_set_by_default(self):
+ docs = render_chart(
+ values={"statsd": {"enabled": True}},
+ show_only=["templates/statsd/statsd-service.yaml"],
+ )
+
+ assert jmespath.search("spec.ipFamilyPolicy", docs[0]) is None
+ assert jmespath.search("spec.ipFamilies", docs[0]) is None
+
+
class TestStatsdServiceAccount:
"""Tests statsd service account."""
diff --git a/chart/values.schema.json b/chart/values.schema.json
index 671554181ff..516cda888d5 100644
--- a/chart/values.schema.json
+++ b/chart/values.schema.json
@@ -232,6 +232,34 @@
"default": false,
"x-docsSection": "Kubernetes"
},
+ "ipFamilyPolicy": {
+ "description": "Specify the ip family policy to configure
dual-stack networking for all Services. See
https://kubernetes.io/docs/concepts/services-networking/dual-stack/",
+ "type": [
+ "string",
+ "null"
+ ],
+ "enum": [
+ "SingleStack",
+ "PreferDualStack",
+ "RequireDualStack",
+ null
+ ],
+ "default": null,
+ "x-docsSection": "Kubernetes"
+ },
+ "ipFamilies": {
+ "description": "List of IP families for all Services (e.g.
[\"IPv4\"] or [\"IPv6\"] or [\"IPv4\", \"IPv6\"]).",
+ "type": "array",
+ "items": {
+ "type": "string",
+ "enum": [
+ "IPv4",
+ "IPv6"
+ ]
+ },
+ "default": [],
+ "x-docsSection": "Kubernetes"
+ },
"imagePullSecrets": {
"description": "List of existing Kubernetes secrets containing
Base64 encoded credentials to connect to private registries (will get passed to
imagePullSecrets).",
"type": "array",
diff --git a/chart/values.yaml b/chart/values.yaml
index 125a6eabf0d..9b3f8b0cd61 100644
--- a/chart/values.yaml
+++ b/chart/values.yaml
@@ -139,6 +139,13 @@ labels: {}
# Whenever service links should be added to each pod.
enableServiceLinks: false
+# Specify the ip family policy to configure dual-stack networking for all
Services.
+# See https://kubernetes.io/docs/concepts/services-networking/dual-stack/
+ipFamilyPolicy: ~
+
+# List of IP families for all Services (e.g., ["IPv4"] or ["IPv6"] or
["IPv4","IPv6"]).
+ipFamilies: []
+
# List of existing Kubernetes secrets containing Base64 encoded credentials to
connect to private
# registries. Items can be either strings or {name: secret} objects.
imagePullSecrets: []