diff --git a/.chloggen/add-ip-families.yaml b/.chloggen/add-ip-families.yaml new file mode 100755 index 0000000000..bd4f68db2f --- /dev/null +++ b/.chloggen/add-ip-families.yaml @@ -0,0 +1,16 @@ +# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix' +change_type: 'enhancement' + +# The name of the component, or a single word describing the area of concern, (e.g. collector, target allocator, auto-instrumentation, opamp, github action) +component: 'collector' + +# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`). +note: "Enabling ipFamilies and ipFamilyPolicy to be configured via OpenTelemetryCollector" + +# One or more tracking issues related to the change +issues: [2958] + +# (Optional) One or more lines of additional information to render under the primary note. +# These lines will be padded with 2 spaces and then inserted directly into the document. +# Use pipe (|) for multiline entries. +subtext: diff --git a/Makefile b/Makefile index 19e7d3ccd5..932995526f 100644 --- a/Makefile +++ b/Makefile @@ -496,7 +496,7 @@ operator-sdk: $(LOCALBIN) # Generate bundle manifests and metadata, then validate generated files. .PHONY: generate-bundle generate-bundle: kustomize operator-sdk manifests set-image-controller api-docs - sed -i 's/minKubeVersion: .*/minKubeVersion: $(MIN_KUBERNETES_VERSION)/' config/manifests/$(BUNDLE_VARIANT)/bases/opentelemetry-operator.clusterserviceversion.yaml + sed -e 's/minKubeVersion: .*/minKubeVersion: $(MIN_KUBERNETES_VERSION)/' config/manifests/$(BUNDLE_VARIANT)/bases/opentelemetry-operator.clusterserviceversion.yaml $(OPERATOR_SDK) generate kustomize manifests -q --input-dir $(MANIFESTS_DIR) --output-dir $(MANIFESTS_DIR) cd $(BUNDLE_DIR) && cp ../../PROJECT . && $(KUSTOMIZE) build ../../$(MANIFESTS_DIR) | $(OPERATOR_SDK) generate bundle $(BUNDLE_BUILD_GEN_FLAGS) && rm PROJECT diff --git a/apis/v1alpha1/opampbridge_types.go b/apis/v1alpha1/opampbridge_types.go index e8ee0e52e6..3f6a3dc3a2 100644 --- a/apis/v1alpha1/opampbridge_types.go +++ b/apis/v1alpha1/opampbridge_types.go @@ -107,6 +107,12 @@ type OpAMPBridgeSpec struct { TopologySpreadConstraints []v1.TopologySpreadConstraint `json:"topologySpreadConstraints,omitempty"` // PodDNSConfig defines the DNS parameters of a pod in addition to those generated from DNSPolicy. PodDNSConfig v1.PodDNSConfig `json:"podDnsConfig,omitempty"` + // IPFamily represents the IP Family (IPv4 or IPv6). This type is used + // to express the family of an IP expressed by a type (e.g. service.spec.ipFamilies). + // +optional + IpFamilies []v1.IPFamily `json:"ipFamilies,omitempty"` + // IPFamilyPolicy represents the dual-stack-ness requested or required by a Service + IpFamilyPolicy *v1.IPFamilyPolicy `json:"ipFamilyPolicy,omitempty"` } // OpAMPBridgeStatus defines the observed state of OpAMPBridge. diff --git a/apis/v1alpha1/zz_generated.deepcopy.go b/apis/v1alpha1/zz_generated.deepcopy.go index 086fafcfd2..87092d21f8 100644 --- a/apis/v1alpha1/zz_generated.deepcopy.go +++ b/apis/v1alpha1/zz_generated.deepcopy.go @@ -681,6 +681,16 @@ func (in *OpAMPBridgeSpec) DeepCopyInto(out *OpAMPBridgeSpec) { } } in.PodDNSConfig.DeepCopyInto(&out.PodDNSConfig) + if in.IpFamilies != nil { + in, out := &in.IpFamilies, &out.IpFamilies + *out = make([]v1.IPFamily, len(*in)) + copy(*out, *in) + } + if in.IpFamilyPolicy != nil { + in, out := &in.IpFamilyPolicy, &out.IpFamilyPolicy + *out = new(v1.IPFamilyPolicy) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OpAMPBridgeSpec. diff --git a/apis/v1beta1/common.go b/apis/v1beta1/common.go index 374f5a2a82..7aa341dade 100644 --- a/apis/v1beta1/common.go +++ b/apis/v1beta1/common.go @@ -226,6 +226,14 @@ type OpenTelemetryCommonFields struct { AdditionalContainers []v1.Container `json:"additionalContainers,omitempty"` // PodDNSConfig defines the DNS parameters of a pod in addition to those generated from DNSPolicy. PodDNSConfig v1.PodDNSConfig `json:"podDnsConfig,omitempty"` + // IPFamily represents the IP Family (IPv4 or IPv6). This type is used + // to express the family of an IP expressed by a type (e.g. service.spec.ipFamilies). + // +optional + IpFamilies []v1.IPFamily `json:"ipFamilies,omitempty"` + // IPFamilyPolicy represents the dual-stack-ness requested or required by a Service + // +kubebuilder:default:=SingleStack + // +optional + IpFamilyPolicy *v1.IPFamilyPolicy `json:"ipFamilyPolicy,omitempty"` } type StatefulSetCommonFields struct { diff --git a/apis/v1beta1/zz_generated.deepcopy.go b/apis/v1beta1/zz_generated.deepcopy.go index cff0c978e3..d0334a8051 100644 --- a/apis/v1beta1/zz_generated.deepcopy.go +++ b/apis/v1beta1/zz_generated.deepcopy.go @@ -477,6 +477,16 @@ func (in *OpenTelemetryCommonFields) DeepCopyInto(out *OpenTelemetryCommonFields } } in.PodDNSConfig.DeepCopyInto(&out.PodDNSConfig) + if in.IpFamilies != nil { + in, out := &in.IpFamilies, &out.IpFamilies + *out = make([]v1.IPFamily, len(*in)) + copy(*out, *in) + } + if in.IpFamilyPolicy != nil { + in, out := &in.IpFamilyPolicy, &out.IpFamilyPolicy + *out = new(v1.IPFamilyPolicy) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OpenTelemetryCommonFields. diff --git a/bundle/community/manifests/opentelemetry.io_opampbridges.yaml b/bundle/community/manifests/opentelemetry.io_opampbridges.yaml index 6e7a42fd34..f20a9de845 100644 --- a/bundle/community/manifests/opentelemetry.io_opampbridges.yaml +++ b/bundle/community/manifests/opentelemetry.io_opampbridges.yaml @@ -592,6 +592,12 @@ spec: type: string imagePullPolicy: type: string + ipFamilies: + items: + type: string + type: array + ipFamilyPolicy: + type: string nodeSelector: additionalProperties: type: string diff --git a/bundle/community/manifests/opentelemetry.io_opentelemetrycollectors.yaml b/bundle/community/manifests/opentelemetry.io_opentelemetrycollectors.yaml index 9569d7fb6c..44c99242ad 100644 --- a/bundle/community/manifests/opentelemetry.io_opentelemetrycollectors.yaml +++ b/bundle/community/manifests/opentelemetry.io_opentelemetrycollectors.yaml @@ -6739,6 +6739,13 @@ spec: - name type: object type: array + ipFamilies: + items: + type: string + type: array + ipFamilyPolicy: + default: SingleStack + type: string lifecycle: properties: postStart: diff --git a/bundle/openshift/manifests/opentelemetry-operator.clusterserviceversion.yaml b/bundle/openshift/manifests/opentelemetry-operator.clusterserviceversion.yaml index d7eb5dd65c..7d74d1e993 100644 --- a/bundle/openshift/manifests/opentelemetry-operator.clusterserviceversion.yaml +++ b/bundle/openshift/manifests/opentelemetry-operator.clusterserviceversion.yaml @@ -99,7 +99,7 @@ metadata: categories: Logging & Tracing,Monitoring certified: "false" containerImage: ghcr.io/open-telemetry/opentelemetry-operator/opentelemetry-operator - createdAt: "2024-07-18T14:09:56Z" + createdAt: "2024-07-20T18:51:11Z" description: Provides the OpenTelemetry components, including the Collector operators.operatorframework.io/builder: operator-sdk-v1.29.0 operators.operatorframework.io/project_layout: go.kubebuilder.io/v3 diff --git a/bundle/openshift/manifests/opentelemetry.io_opampbridges.yaml b/bundle/openshift/manifests/opentelemetry.io_opampbridges.yaml index 6e7a42fd34..f20a9de845 100644 --- a/bundle/openshift/manifests/opentelemetry.io_opampbridges.yaml +++ b/bundle/openshift/manifests/opentelemetry.io_opampbridges.yaml @@ -592,6 +592,12 @@ spec: type: string imagePullPolicy: type: string + ipFamilies: + items: + type: string + type: array + ipFamilyPolicy: + type: string nodeSelector: additionalProperties: type: string diff --git a/bundle/openshift/manifests/opentelemetry.io_opentelemetrycollectors.yaml b/bundle/openshift/manifests/opentelemetry.io_opentelemetrycollectors.yaml index 9569d7fb6c..44c99242ad 100644 --- a/bundle/openshift/manifests/opentelemetry.io_opentelemetrycollectors.yaml +++ b/bundle/openshift/manifests/opentelemetry.io_opentelemetrycollectors.yaml @@ -6739,6 +6739,13 @@ spec: - name type: object type: array + ipFamilies: + items: + type: string + type: array + ipFamilyPolicy: + default: SingleStack + type: string lifecycle: properties: postStart: diff --git a/config/crd/bases/opentelemetry.io_opampbridges.yaml b/config/crd/bases/opentelemetry.io_opampbridges.yaml index 181f2f2d1c..7e789c115f 100644 --- a/config/crd/bases/opentelemetry.io_opampbridges.yaml +++ b/config/crd/bases/opentelemetry.io_opampbridges.yaml @@ -589,6 +589,12 @@ spec: type: string imagePullPolicy: type: string + ipFamilies: + items: + type: string + type: array + ipFamilyPolicy: + type: string nodeSelector: additionalProperties: type: string diff --git a/config/crd/bases/opentelemetry.io_opentelemetrycollectors.yaml b/config/crd/bases/opentelemetry.io_opentelemetrycollectors.yaml index 44110368ad..08a229c1fa 100644 --- a/config/crd/bases/opentelemetry.io_opentelemetrycollectors.yaml +++ b/config/crd/bases/opentelemetry.io_opentelemetrycollectors.yaml @@ -6725,6 +6725,13 @@ spec: - name type: object type: array + ipFamilies: + items: + type: string + type: array + ipFamilyPolicy: + default: SingleStack + type: string lifecycle: properties: postStart: diff --git a/config/crd/bases/opentelemetry.io_targetallocators.yaml b/config/crd/bases/opentelemetry.io_targetallocators.yaml index 27e6c74678..3543bf1141 100644 --- a/config/crd/bases/opentelemetry.io_targetallocators.yaml +++ b/config/crd/bases/opentelemetry.io_targetallocators.yaml @@ -1929,6 +1929,13 @@ spec: - name type: object type: array + ipFamilies: + items: + type: string + type: array + ipFamilyPolicy: + default: SingleStack + type: string lifecycle: properties: postStart: diff --git a/docs/api.md b/docs/api.md index 0f84f1f75e..7c756d98b8 100644 --- a/docs/api.md +++ b/docs/api.md @@ -4183,6 +4183,21 @@ typically used to set access tokens or other authorization headers.
ImagePullPolicy indicates the pull policy to be used for retrieving the container image (Always, Never, IfNotPresent)
false + + ipFamilies + []string + + IPFamily represents the IP Family (IPv4 or IPv6). This type is used +to express the family of an IP expressed by a type (e.g. service.spec.ipFamilies).
+ + false + + ipFamilyPolicy + string + + IPFamilyPolicy represents the dual-stack-ness requested or required by a Service
+ + false nodeSelector map[string]string @@ -30936,6 +30951,23 @@ an initContainer will lead to a restart of the Pod. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/
false + + ipFamilies + []string + + IPFamily represents the IP Family (IPv4 or IPv6). This type is used +to express the family of an IP expressed by a type (e.g. service.spec.ipFamilies).
+ + false + + ipFamilyPolicy + string + + IPFamilyPolicy represents the dual-stack-ness requested or required by a Service
+
+ Default: SingleStack
+ + false lifecycle object diff --git a/internal/manifests/collector/service.go b/internal/manifests/collector/service.go index 2cf7616732..df5a16ac2d 100644 --- a/internal/manifests/collector/service.go +++ b/internal/manifests/collector/service.go @@ -97,6 +97,8 @@ func MonitoringService(params manifests.Params) (*corev1.Service, error) { Name: "monitoring", Port: metricsPort, }}, + IPFamilies: params.OtelCol.Spec.IpFamilies, + IPFamilyPolicy: params.OtelCol.Spec.IpFamilyPolicy, }, }, nil } @@ -163,6 +165,8 @@ func Service(params manifests.Params) (*corev1.Service, error) { Selector: manifestutils.SelectorLabels(params.OtelCol.ObjectMeta, ComponentOpenTelemetryCollector), ClusterIP: "", Ports: ports, + IPFamilies: params.OtelCol.Spec.IpFamilies, + IPFamilyPolicy: params.OtelCol.Spec.IpFamilyPolicy, }, }, nil } diff --git a/internal/manifests/collector/service_test.go b/internal/manifests/collector/service_test.go index 7ee7dfc4a0..24a31ec21f 100644 --- a/internal/manifests/collector/service_test.go +++ b/internal/manifests/collector/service_test.go @@ -351,3 +351,43 @@ func serviceWithInternalTrafficPolicy(name string, ports []v1beta1.PortsSpec, in }, } } + +func TestServiceWithIpFamily(t *testing.T) { + t.Run("should return IPFamilies for IPV4 and IPV6", func(t *testing.T) { + params := deploymentParams() + params.OtelCol.Spec.IpFamilies = []v1.IPFamily{ + "IPv4", + "IPv6", + } + actual, err := Service(params) + assert.NoError(t, err) + assert.Equal(t, actual.Spec.IPFamilies, []v1.IPFamily{ + "IPv4", + "IPv6", + }) + }) + t.Run("should return IPPolicy SingleStack", func(t *testing.T) { + params := deploymentParams() + baseIpFamily := v1.IPFamilyPolicySingleStack + params.OtelCol.Spec.IpFamilyPolicy = &baseIpFamily + actual, err := Service(params) + assert.NoError(t, err) + assert.Equal(t, actual.Spec.IPFamilyPolicy, params.OtelCol.Spec.IpFamilyPolicy) + }) + t.Run("should return IPPolicy PreferDualStack", func(t *testing.T) { + params := deploymentParams() + baseIpFamily := v1.IPFamilyPolicyPreferDualStack + params.OtelCol.Spec.IpFamilyPolicy = &baseIpFamily + actual, err := Service(params) + assert.NoError(t, err) + assert.Equal(t, actual.Spec.IPFamilyPolicy, params.OtelCol.Spec.IpFamilyPolicy) + }) + t.Run("should return IPPolicy RequireDualStack ", func(t *testing.T) { + params := deploymentParams() + baseIpFamily := v1.IPFamilyPolicyRequireDualStack + params.OtelCol.Spec.IpFamilyPolicy = &baseIpFamily + actual, err := Service(params) + assert.NoError(t, err) + assert.Equal(t, actual.Spec.IPFamilyPolicy, params.OtelCol.Spec.IpFamilyPolicy) + }) +} diff --git a/internal/manifests/opampbridge/service.go b/internal/manifests/opampbridge/service.go index 0c2a7dd9a0..b8faef887e 100644 --- a/internal/manifests/opampbridge/service.go +++ b/internal/manifests/opampbridge/service.go @@ -44,8 +44,10 @@ func Service(params manifests.Params) *corev1.Service { Labels: labels, }, Spec: corev1.ServiceSpec{ - Selector: selector, - Ports: ports, + Selector: selector, + Ports: ports, + IPFamilies: params.OpAMPBridge.Spec.IpFamilies, + IPFamilyPolicy: params.OpAMPBridge.Spec.IpFamilyPolicy, }, } } diff --git a/internal/manifests/targetallocator/service.go b/internal/manifests/targetallocator/service.go index c31cb927d5..9577a43290 100644 --- a/internal/manifests/targetallocator/service.go +++ b/internal/manifests/targetallocator/service.go @@ -41,6 +41,8 @@ func Service(params Params) *corev1.Service { Port: 80, TargetPort: intstr.FromString("http"), }}, + IPFamilies: params.TargetAllocator.Spec.IpFamilies, + IPFamilyPolicy: params.TargetAllocator.Spec.IpFamilyPolicy, }, } } diff --git a/kind-1.23.yaml b/kind-1.23.yaml index 5760fd670b..cbbdccb8e8 100644 --- a/kind-1.23.yaml +++ b/kind-1.23.yaml @@ -1,5 +1,7 @@ kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 +networking: + ipFamily: dual nodes: - role: control-plane image: kindest/node:v1.23.17@sha256:14d0a9a892b943866d7e6be119a06871291c517d279aedb816a4b4bc0ec0a5b3 @@ -15,4 +17,4 @@ nodes: protocol: TCP - containerPort: 443 hostPort: 443 - protocol: TCP + protocol: TCP \ No newline at end of file diff --git a/kind-1.24.yaml b/kind-1.24.yaml index 0d76591c1a..0bd5672bed 100644 --- a/kind-1.24.yaml +++ b/kind-1.24.yaml @@ -1,5 +1,7 @@ kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 +networking: + ipFamily: dual nodes: - role: control-plane image: kindest/node:v1.24.15@sha256:7db4f8bea3e14b82d12e044e25e34bd53754b7f2b0e9d56df21774e6f66a70ab diff --git a/kind-1.25.yaml b/kind-1.25.yaml index 340110f545..264bccf396 100644 --- a/kind-1.25.yaml +++ b/kind-1.25.yaml @@ -1,5 +1,7 @@ kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 +networking: + ipFamily: dual nodes: - role: control-plane image: kindest/node:v1.25.11@sha256:227fa11ce74ea76a0474eeefb84cb75d8dad1b08638371ecf0e86259b35be0c8 diff --git a/kind-1.26.yaml b/kind-1.26.yaml index 5a7ae790d4..ce10fde54e 100644 --- a/kind-1.26.yaml +++ b/kind-1.26.yaml @@ -1,5 +1,7 @@ kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 +networking: + ipFamily: dual nodes: - role: control-plane image: kindest/node:v1.26.6@sha256:6e2d8b28a5b601defe327b98bd1c2d1930b49e5d8c512e1895099e4504007adb diff --git a/kind-1.27.yaml b/kind-1.27.yaml index 53b8f092b3..cda7fd1f87 100644 --- a/kind-1.27.yaml +++ b/kind-1.27.yaml @@ -1,5 +1,7 @@ kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 +networking: + ipFamily: dual nodes: - role: control-plane image: kindest/node:v1.27.3@sha256:3966ac761ae0136263ffdb6cfd4db23ef8a83cba8a463690e98317add2c9ba72 diff --git a/kind-1.28.yaml b/kind-1.28.yaml index 711640f952..0a0148725b 100644 --- a/kind-1.28.yaml +++ b/kind-1.28.yaml @@ -1,5 +1,7 @@ kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 +networking: + ipFamily: dual nodes: - role: control-plane image: kindest/node:v1.28.0@sha256:b7a4cad12c197af3ba43202d3efe03246b3f0793f162afb40a33c923952d5b31 diff --git a/kind-1.29.yaml b/kind-1.29.yaml index a1fc5c5f07..de12885a3c 100644 --- a/kind-1.29.yaml +++ b/kind-1.29.yaml @@ -1,5 +1,7 @@ kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 +networking: + ipFamily: dual nodes: - role: control-plane image: kindest/node:v1.29.0@sha256:eaa1450915475849a73a9227b8f201df25e55e268e5d619312131292e324d570 diff --git a/kind-1.30.yaml b/kind-1.30.yaml index ad68ebecd3..8f4413556c 100644 --- a/kind-1.30.yaml +++ b/kind-1.30.yaml @@ -1,8 +1,10 @@ kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 +networking: + ipFamily: dual nodes: - role: control-plane - image: kindest/node:v1.30.0@sha256:047357ac0cfea04663786a612ba1eaba9702bef25227a794b52890dd8bcd692e + image: kindest/node:v1.30.2@sha256:ecfe5841b9bee4fe9690f49c118c33629fa345e3350a0c67a5a34482a99d6bba kubeadmConfigPatches: - | kind: InitConfiguration diff --git a/tests/e2e/smoke-ip-families/00-assert.yaml b/tests/e2e/smoke-ip-families/00-assert.yaml new file mode 100644 index 0000000000..cc0934ad73 --- /dev/null +++ b/tests/e2e/smoke-ip-families/00-assert.yaml @@ -0,0 +1,56 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: simplest-ipfamily-collector +status: + readyReplicas: 1 +--- +apiVersion: v1 +kind: Service +metadata: + name: simplest-ipfamily-collector-headless +spec: + ipFamilies: + - IPv4 + ipFamilyPolicy: SingleStack + ports: + - appProtocol: grpc + name: jaeger-grpc + port: 14250 + protocol: TCP + targetPort: 14250 + - appProtocol: grpc + name: otlp-grpc + port: 4317 + protocol: TCP + targetPort: 4317 + - appProtocol: http + name: otlp-http + port: 4318 + protocol: TCP + targetPort: 4318 +--- +apiVersion: v1 +kind: Service +metadata: + name: simplest-ipfamily-collector +spec: + ipFamilies: + - IPv4 + ipFamilyPolicy: SingleStack + ports: + - appProtocol: grpc + name: jaeger-grpc + port: 14250 + protocol: TCP + targetPort: 14250 + - appProtocol: grpc + name: otlp-grpc + port: 4317 + protocol: TCP + targetPort: 4317 + - appProtocol: http + name: otlp-http + port: 4318 + protocol: TCP + targetPort: 4318 diff --git a/tests/e2e/smoke-ip-families/00-install.yaml b/tests/e2e/smoke-ip-families/00-install.yaml new file mode 100644 index 0000000000..c6eae94448 --- /dev/null +++ b/tests/e2e/smoke-ip-families/00-install.yaml @@ -0,0 +1,29 @@ +apiVersion: opentelemetry.io/v1beta1 +kind: OpenTelemetryCollector +metadata: + name: simplest-ipfamily +spec: + upgradeStrategy: automatic + ipFamilies: + - IPv4 + ipFamilyPolicy: SingleStack + config: + receivers: + jaeger: + protocols: + grpc: + otlp: + protocols: + grpc: + http: + processors: + + exporters: + debug: + + service: + pipelines: + traces: + receivers: [jaeger, otlp] + processors: [] + exporters: [debug] diff --git a/tests/e2e/smoke-ip-families/01-assert.yaml b/tests/e2e/smoke-ip-families/01-assert.yaml new file mode 100644 index 0000000000..64241e2205 --- /dev/null +++ b/tests/e2e/smoke-ip-families/01-assert.yaml @@ -0,0 +1,58 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: simplest-ippolicy-collector +status: + readyReplicas: 1 +--- +apiVersion: v1 +kind: Service +metadata: + name: simplest-ippolicy-collector-headless +spec: + ipFamilies: + - IPv4 + - IPv6 + ipFamilyPolicy: PreferDualStack + ports: + - appProtocol: grpc + name: jaeger-grpc + port: 14250 + protocol: TCP + targetPort: 14250 + - appProtocol: grpc + name: otlp-grpc + port: 4317 + protocol: TCP + targetPort: 4317 + - appProtocol: http + name: otlp-http + port: 4318 + protocol: TCP + targetPort: 4318 +--- +apiVersion: v1 +kind: Service +metadata: + name: simplest-ippolicy-collector +spec: + ipFamilies: + - IPv4 + - IPv6 + ipFamilyPolicy: PreferDualStack + ports: + - appProtocol: grpc + name: jaeger-grpc + port: 14250 + protocol: TCP + targetPort: 14250 + - appProtocol: grpc + name: otlp-grpc + port: 4317 + protocol: TCP + targetPort: 4317 + - appProtocol: http + name: otlp-http + port: 4318 + protocol: TCP + targetPort: 4318 diff --git a/tests/e2e/smoke-ip-families/01-install.yaml b/tests/e2e/smoke-ip-families/01-install.yaml new file mode 100644 index 0000000000..fa1ee7bf67 --- /dev/null +++ b/tests/e2e/smoke-ip-families/01-install.yaml @@ -0,0 +1,30 @@ +apiVersion: opentelemetry.io/v1beta1 +kind: OpenTelemetryCollector +metadata: + name: simplest-ippolicy +spec: + upgradeStrategy: automatic + ipFamilies: + - IPv4 + - IPv6 + ipFamilyPolicy: PreferDualStack + config: + receivers: + jaeger: + protocols: + grpc: + otlp: + protocols: + grpc: + http: + processors: + + exporters: + debug: + + service: + pipelines: + traces: + receivers: [jaeger, otlp] + processors: [] + exporters: [debug] diff --git a/tests/e2e/smoke-ip-families/chainsaw-test.yaml b/tests/e2e/smoke-ip-families/chainsaw-test.yaml new file mode 100755 index 0000000000..c8cf14641c --- /dev/null +++ b/tests/e2e/smoke-ip-families/chainsaw-test.yaml @@ -0,0 +1,20 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/kyverno/chainsaw/main/.schemas/json/test-chainsaw-v1alpha1.json +apiVersion: chainsaw.kyverno.io/v1alpha1 +kind: Test +metadata: + creationTimestamp: null + name: smoke-ip-families-policies +spec: + steps: + - name: step-00 + try: + - apply: + file: 00-install.yaml + - assert: + file: 00-assert.yaml + - name: step-01 + try: + - apply: + file: 01-install.yaml + - assert: + file: 01-assert.yaml