From ad20c5e676d5e02d7c0a420e7773164cfed9c671 Mon Sep 17 00:00:00 2001 From: Tim Dettrick Date: Sat, 22 Jul 2023 00:15:10 +1000 Subject: [PATCH] fix: handle IPv6 KUBERNETES_SERVICE_HOST (#437) --- .../lib/fluent/plugin/filter_enhance_k8s_metadata.rb | 10 +++++++++- fluent-plugin-events/lib/fluent/plugin/in_events.rb | 10 +++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/fluent-plugin-enhance-k8s-metadata/lib/fluent/plugin/filter_enhance_k8s_metadata.rb b/fluent-plugin-enhance-k8s-metadata/lib/fluent/plugin/filter_enhance_k8s_metadata.rb index b3083440..7ccace0a 100644 --- a/fluent-plugin-enhance-k8s-metadata/lib/fluent/plugin/filter_enhance_k8s_metadata.rb +++ b/fluent-plugin-enhance-k8s-metadata/lib/fluent/plugin/filter_enhance_k8s_metadata.rb @@ -128,7 +128,15 @@ def normalize_param log.info 'Kubernetes URL is not set - inspecting environment' env_host = ENV['KUBERNETES_SERVICE_HOST'] env_port = ENV['KUBERNETES_SERVICE_PORT'] - @kubernetes_url = "https://#{env_host}:#{env_port}" unless env_host.nil? || env_port.nil? + if present?(env_host) && present?(env_port) + if env_host =~ Resolv::IPv6::Regex + # Brackets are needed around IPv6 addresses + env_host = "[#{env_host}]" + end + @kubernetes_url = "https://#{env_host}:#{env_port}" + else + log.debug "No Kubernetes URL could be found in config or environment" + end end log.debug "Kubernetes URL: '#{@kubernetes_url}'" diff --git a/fluent-plugin-events/lib/fluent/plugin/in_events.rb b/fluent-plugin-events/lib/fluent/plugin/in_events.rb index c09fd5a6..2a94f7f7 100644 --- a/fluent-plugin-events/lib/fluent/plugin/in_events.rb +++ b/fluent-plugin-events/lib/fluent/plugin/in_events.rb @@ -191,7 +191,15 @@ def normalize_param log.debug 'Kubernetes URL is not set - inspecting environment' env_host = ENV['KUBERNETES_SERVICE_HOST'] env_port = ENV['KUBERNETES_SERVICE_PORT'] - @kubernetes_url = "https://#{env_host}:#{env_port}" unless env_host.nil? || env_port.nil? + if present?(env_host) && present?(env_port) + if env_host =~ Resolv::IPv6::Regex + # Brackets are needed around IPv6 addresses + env_host = "[#{env_host}]" + end + @kubernetes_url = "https://#{env_host}:#{env_port}" + else + log.debug "No Kubernetes URL could be found in config or environment" + end end log.debug "Kubernetes URL: '#{@kubernetes_url}'"