Skip to content

Commit c120ba8

Browse files
committed
feat: added ingress for extensions
Signed-off-by: Ankit152 <[email protected]>
1 parent 6782fdf commit c120ba8

File tree

5 files changed

+79
-6
lines changed

5 files changed

+79
-6
lines changed

apis/v1beta1/opentelemetrycollector_types.go

+5
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,11 @@ type OpenTelemetryCollectorSpec struct {
111111
// Valid modes are: deployment, daemonset and statefulset.
112112
// +optional
113113
Ingress Ingress `json:"ingress,omitempty"`
114+
// ExtensionIngress is used to specify how OpenTelemetry Collector is exposed. This
115+
// functionality is only available if one of the valid modes is set.
116+
// Valid modes are: deployment, daemonset and statefulset.
117+
// +optional
118+
ExtensionIngress Ingress `json:"extensionIngress,omitempty"`
114119
// Liveness config for the OpenTelemetry Collector except the probe handler which is auto generated from the health extension of the collector.
115120
// It is only effective when healthcheckextension is configured in the OpenTelemetry Collector pipeline.
116121
// +optional

apis/v1beta1/zz_generated.deepcopy.go

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/manifests/collector/collector.go

+1
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ func Build(params manifests.Params) ([]client.Object, error) {
5555
manifests.Factory(MonitoringService),
5656
manifests.Factory(ExtensionService),
5757
manifests.Factory(Ingress),
58+
manifests.Factory(ExtensionIngress),
5859
}...)
5960

6061
if featuregate.CollectorUsesTargetAllocatorCR.IsEnabled() {

internal/manifests/collector/ingress.go

+67-6
Original file line numberDiff line numberDiff line change
@@ -50,9 +50,9 @@ func Ingress(params manifests.Params) (*networkingv1.Ingress, error) {
5050
var rules []networkingv1.IngressRule
5151
switch params.OtelCol.Spec.Ingress.RuleType {
5252
case v1beta1.IngressRuleTypePath, "":
53-
rules = []networkingv1.IngressRule{createPathIngressRules(params.OtelCol.Name, params.OtelCol.Spec.Ingress.Hostname, ports)}
53+
rules = []networkingv1.IngressRule{createPathIngressRules(params.OtelCol.Name, params.OtelCol.Spec.Ingress.Hostname, ports, "service")}
5454
case v1beta1.IngressRuleTypeSubdomain:
55-
rules = createSubdomainIngressRules(params.OtelCol.Name, params.OtelCol.Spec.Ingress.Hostname, ports)
55+
rules = createSubdomainIngressRules(params.OtelCol.Name, params.OtelCol.Spec.Ingress.Hostname, ports, "service")
5656
}
5757

5858
return &networkingv1.Ingress{
@@ -70,17 +70,61 @@ func Ingress(params manifests.Params) (*networkingv1.Ingress, error) {
7070
}, nil
7171
}
7272

73-
func createPathIngressRules(otelcol string, hostname string, ports []corev1.ServicePort) networkingv1.IngressRule {
73+
func ExtensionIngress(params manifests.Params) (*networkingv1.Ingress, error) {
74+
name := naming.ExtensionIngress(params.OtelCol.Name)
75+
labels := manifestutils.Labels(params.OtelCol.ObjectMeta, name, params.OtelCol.Spec.Image, ComponentOpenTelemetryCollector, params.Config.LabelsFilter())
76+
77+
if params.OtelCol.Spec.ExtensionIngress.Type != v1beta1.IngressTypeIngress {
78+
return nil, nil
79+
}
80+
81+
ports, err := extensionServicePortsFromCfg(params.Log, params.OtelCol)
82+
if err != nil || len(ports) == 0 {
83+
return nil, err
84+
}
85+
86+
var rules []networkingv1.IngressRule
87+
switch params.OtelCol.Spec.Ingress.RuleType {
88+
case v1beta1.IngressRuleTypePath, "":
89+
rules = []networkingv1.IngressRule{createPathIngressRules(params.OtelCol.Name, params.OtelCol.Spec.ExtensionIngress.Hostname, ports, "extension")}
90+
case v1beta1.IngressRuleTypeSubdomain:
91+
rules = createSubdomainIngressRules(params.OtelCol.Name, params.OtelCol.Spec.ExtensionIngress.Hostname, ports, "extension")
92+
}
93+
94+
return &networkingv1.Ingress{
95+
ObjectMeta: metav1.ObjectMeta{
96+
Name: name,
97+
Namespace: params.OtelCol.Namespace,
98+
Annotations: params.OtelCol.Spec.ExtensionIngress.Annotations,
99+
Labels: labels,
100+
},
101+
Spec: networkingv1.IngressSpec{
102+
TLS: params.OtelCol.Spec.ExtensionIngress.TLS,
103+
Rules: rules,
104+
IngressClassName: params.OtelCol.Spec.ExtensionIngress.IngressClassName,
105+
},
106+
}, nil
107+
}
108+
109+
func createPathIngressRules(otelcol string, hostname string, ports []corev1.ServicePort, serviceType string) networkingv1.IngressRule {
74110
pathType := networkingv1.PathTypePrefix
75111
paths := make([]networkingv1.HTTPIngressPath, len(ports))
112+
113+
var name string
114+
if serviceType == "extension" {
115+
name = naming.ExtensionService(otelcol)
116+
} else {
117+
name = naming.Service(otelcol)
118+
}
119+
76120
for i, port := range ports {
77121
portName := naming.PortName(port.Name, port.Port)
78122
paths[i] = networkingv1.HTTPIngressPath{
79123
Path: "/" + port.Name,
80124
PathType: &pathType,
81125
Backend: networkingv1.IngressBackend{
82126
Service: &networkingv1.IngressServiceBackend{
83-
Name: naming.Service(otelcol),
127+
Name: name,
84128
Port: networkingv1.ServiceBackendPort{
85129
Name: portName,
86130
},
@@ -98,9 +142,17 @@ func createPathIngressRules(otelcol string, hostname string, ports []corev1.Serv
98142
}
99143
}
100144

101-
func createSubdomainIngressRules(otelcol string, hostname string, ports []corev1.ServicePort) []networkingv1.IngressRule {
145+
func createSubdomainIngressRules(otelcol string, hostname string, ports []corev1.ServicePort, serviceType string) []networkingv1.IngressRule {
102146
var rules []networkingv1.IngressRule
103147
pathType := networkingv1.PathTypePrefix
148+
149+
var name string
150+
if serviceType == "extension" {
151+
name = naming.ExtensionService(otelcol)
152+
} else {
153+
name = naming.Service(otelcol)
154+
}
155+
104156
for _, port := range ports {
105157
portName := naming.PortName(port.Name, port.Port)
106158

@@ -119,7 +171,7 @@ func createSubdomainIngressRules(otelcol string, hostname string, ports []corev1
119171
PathType: &pathType,
120172
Backend: networkingv1.IngressBackend{
121173
Service: &networkingv1.IngressServiceBackend{
122-
Name: naming.Service(otelcol),
174+
Name: name,
123175
Port: networkingv1.ServiceBackendPort{
124176
Name: portName,
125177
},
@@ -163,6 +215,15 @@ func servicePortsFromCfg(logger logr.Logger, otelcol v1beta1.OpenTelemetryCollec
163215
return ports, nil
164216
}
165217

218+
func extensionServicePortsFromCfg(logger logr.Logger, otelcol v1beta1.OpenTelemetryCollector) ([]corev1.ServicePort, error) {
219+
ports, err := otelcol.Spec.Config.GetExtensionPorts(logger)
220+
if err != nil {
221+
return nil, err
222+
}
223+
224+
return ports, nil
225+
}
226+
166227
func toServicePorts(spec []v1beta1.PortsSpec) []corev1.ServicePort {
167228
var ports []corev1.ServicePort
168229
for _, p := range spec {

internal/naming/main.go

+5
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,11 @@ func Ingress(otelcol string) string {
131131
return DNSName(Truncate("%s-ingress", 63, otelcol))
132132
}
133133

134+
// Extension Ingress builds the ingress name for the extensions.
135+
func ExtensionIngress(otelcol string) string {
136+
return DNSName(Truncate("%s-extension-ingress", 63, otelcol))
137+
}
138+
134139
// Route builds the route name based on the instance.
135140
func Route(otelcol string, prefix string) string {
136141
return DNSName(Truncate("%s-%s-route", 63, prefix, otelcol))

0 commit comments

Comments
 (0)