diff --git a/pom.xml b/pom.xml index dcd39aab..fbd1d742 100644 --- a/pom.xml +++ b/pom.xml @@ -76,6 +76,7 @@ + 1.2 1.3.83 1.16.8 2.5 @@ -205,6 +206,12 @@ ${servlet-api.version} + + commons-logging + commons-logging + ${commons-logging.version} + + org.projectlombok lombok diff --git a/readme.md b/readme.md index 9e8227b8..3bd9f2af 100644 --- a/readme.md +++ b/readme.md @@ -183,6 +183,17 @@ An alternative approach that provides more direct Archaius support without getti This module allows you to annotate your application with the `@ArchaiusConfigMapSource` and archaius will automatically use the configmap as a watched source *(get notification on changes)*. --- +### Troubleshooting + +Most of the components provided in this project need to know the namespace. For Kubernetes (1.3+) the namespace is made available to pod as part of the service account secret and automatically detected by the client. +For earlier version it needs to be specified as an env var to the pod. A quick way to do this is: + + env: + - name: "KUBERNETES_NAMESPACE" + valueFrom: + fieldRef: + fieldPath: "metadata.namespace" + ### Building You can just use maven to build it from sources: diff --git a/spring-cloud-kubernetes-core/pom.xml b/spring-cloud-kubernetes-core/pom.xml index 74e6d9d4..3e3330de 100644 --- a/spring-cloud-kubernetes-core/pom.xml +++ b/spring-cloud-kubernetes-core/pom.xml @@ -55,6 +55,11 @@ provided + + commons-logging + commons-logging + + diff --git a/spring-cloud-kubernetes-core/src/main/java/io/fabric8/spring/cloud/kubernetes/KubernetesAutoConfiguration.java b/spring-cloud-kubernetes-core/src/main/java/io/fabric8/spring/cloud/kubernetes/KubernetesAutoConfiguration.java index 66d866a7..449d5516 100644 --- a/spring-cloud-kubernetes-core/src/main/java/io/fabric8/spring/cloud/kubernetes/KubernetesAutoConfiguration.java +++ b/spring-cloud-kubernetes-core/src/main/java/io/fabric8/spring/cloud/kubernetes/KubernetesAutoConfiguration.java @@ -20,6 +20,8 @@ import io.fabric8.kubernetes.client.Config; import io.fabric8.kubernetes.client.ConfigBuilder; import io.fabric8.kubernetes.client.DefaultKubernetesClient; import io.fabric8.kubernetes.client.KubernetesClient; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; @@ -32,6 +34,8 @@ import org.springframework.context.annotation.Configuration; @EnableConfigurationProperties(KubernetesClientProperties.class) public class KubernetesAutoConfiguration { + private static final Log LOG = LogFactory.getLog(KubernetesClientProperties.class); + @Bean @ConditionalOnMissingBean(Config.class) public Config kubernetesClientConfig(KubernetesClientProperties kubernetesClientProperties) { @@ -62,6 +66,9 @@ public class KubernetesAutoConfiguration { .withTrustCerts(or(kubernetesClientProperties.isTrustCerts(), base.isTrustCerts())) .build(); + if (properties.getNamespace() == null || properties.getNamespace().isEmpty()) { + LOG.warn("No namespace has been detected. Please specify KUBERNETES_NAMESPACE env var, or use a later kubernetes version (1.3 or later)"); + } return properties; } diff --git a/spring-cloud-kubernetes-core/src/main/java/io/fabric8/spring/cloud/kubernetes/KubernetesHealthIndicator.java b/spring-cloud-kubernetes-core/src/main/java/io/fabric8/spring/cloud/kubernetes/KubernetesHealthIndicator.java index 5deb68c1..c7984f1d 100644 --- a/spring-cloud-kubernetes-core/src/main/java/io/fabric8/spring/cloud/kubernetes/KubernetesHealthIndicator.java +++ b/spring-cloud-kubernetes-core/src/main/java/io/fabric8/spring/cloud/kubernetes/KubernetesHealthIndicator.java @@ -38,6 +38,7 @@ public class KubernetesHealthIndicator extends AbstractHealthIndicator { if (current != null) { builder.up() .withDetail("inside", true) + .withDetail("namespace", current.getMetadata().getNamespace()) .withDetail("podName", current.getMetadata().getName()) .withDetail("podIp", current.getStatus().getPodIP()) .withDetail("serviceAccount", current.getSpec().getServiceAccountName())