You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by re...@apache.org on 2020/02/10 12:43:20 UTC

[tomcat] branch 9.0.x updated: Improve Kubernetes environment lookups

This is an automated email from the ASF dual-hosted git repository.

remm pushed a commit to branch 9.0.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git


The following commit(s) were added to refs/heads/9.0.x by this push:
     new 65e6925  Improve Kubernetes environment lookups
65e6925 is described below

commit 65e6925fabc8e707c2b6a91667e35721a8d4501d
Author: remm <re...@apache.org>
AuthorDate: Mon Feb 10 13:26:26 2020 +0100

    Improve Kubernetes environment lookups
    
    Fix lookup order by looking for specific names first, then the standard
    Kubernetes ones, otherwise overriding will most likely not work.
    Also add a dedicated name for the DNS service, that will default to
    getNamespace() if not present.
    Submitted by Bernd Bohmann.
---
 .../tribes/membership/cloud/CloudMembershipProvider.java |  2 +-
 .../tribes/membership/cloud/DNSMembershipProvider.java   | 15 +++++++++------
 .../membership/cloud/KubernetesMembershipProvider.java   | 16 ++++++++--------
 webapps/docs/changelog.xml                               |  9 +++++++++
 4 files changed, 27 insertions(+), 15 deletions(-)

diff --git a/java/org/apache/catalina/tribes/membership/cloud/CloudMembershipProvider.java b/java/org/apache/catalina/tribes/membership/cloud/CloudMembershipProvider.java
index f33aed6..22f9a95 100644
--- a/java/org/apache/catalina/tribes/membership/cloud/CloudMembershipProvider.java
+++ b/java/org/apache/catalina/tribes/membership/cloud/CloudMembershipProvider.java
@@ -88,7 +88,7 @@ public abstract class CloudMembershipProvider extends MembershipProviderBase imp
      * @return the namespace
      */
     protected String getNamespace() {
-        String namespace = getEnv("KUBERNETES_NAMESPACE", CUSTOM_ENV_PREFIX + "NAMESPACE");
+        String namespace = getEnv(CUSTOM_ENV_PREFIX + "NAMESPACE", "KUBERNETES_NAMESPACE");
         if (namespace == null || namespace.length() == 0) {
             log.warn(sm.getString("kubernetesMembershipProvider.noNamespace"));
             namespace = "tomcat";
diff --git a/java/org/apache/catalina/tribes/membership/cloud/DNSMembershipProvider.java b/java/org/apache/catalina/tribes/membership/cloud/DNSMembershipProvider.java
index 25fcff1..7b57d97 100644
--- a/java/org/apache/catalina/tribes/membership/cloud/DNSMembershipProvider.java
+++ b/java/org/apache/catalina/tribes/membership/cloud/DNSMembershipProvider.java
@@ -33,7 +33,7 @@ import org.apache.juli.logging.LogFactory;
 public class DNSMembershipProvider extends CloudMembershipProvider {
     private static final Log log = LogFactory.getLog(DNSMembershipProvider.class);
 
-    private String namespace;
+    private String dnsServiceName;
 
     @Override
     public void start(int level) throws Exception {
@@ -44,12 +44,15 @@ public class DNSMembershipProvider extends CloudMembershipProvider {
         super.start(level);
 
         // Set up Kubernetes API parameters
-        namespace = getNamespace();
+        dnsServiceName = getEnv("DNS_MEMBERSHIP_SERVICE_NAME");
+        if (dnsServiceName == null) {
+            dnsServiceName = getNamespace();
+        }
 
         if (log.isDebugEnabled()) {
-            log.debug(String.format("Namespace [%s] set; clustering enabled", namespace));
+            log.debug(String.format("Namespace [%s] set; clustering enabled", dnsServiceName));
         }
-        namespace = URLEncoder.encode(namespace, "UTF-8");
+        dnsServiceName = URLEncoder.encode(dnsServiceName, "UTF-8");
 
         // Fetch initial members
         heartbeat();
@@ -66,9 +69,9 @@ public class DNSMembershipProvider extends CloudMembershipProvider {
 
         InetAddress[] inetAddresses = null;
         try {
-            inetAddresses = InetAddress.getAllByName(namespace);
+            inetAddresses = InetAddress.getAllByName(dnsServiceName);
         } catch (UnknownHostException exception) {
-            log.warn(sm.getString("dnsMembershipProvider.dnsError", namespace), exception);
+            log.warn(sm.getString("dnsMembershipProvider.dnsError", dnsServiceName), exception);
         }
 
         if (inetAddresses != null) {
diff --git a/java/org/apache/catalina/tribes/membership/cloud/KubernetesMembershipProvider.java b/java/org/apache/catalina/tribes/membership/cloud/KubernetesMembershipProvider.java
index 2950f5a..ce2b1b1 100644
--- a/java/org/apache/catalina/tribes/membership/cloud/KubernetesMembershipProvider.java
+++ b/java/org/apache/catalina/tribes/membership/cloud/KubernetesMembershipProvider.java
@@ -57,12 +57,12 @@ public class KubernetesMembershipProvider extends CloudMembershipProvider {
             log.debug(String.format("Namespace [%s] set; clustering enabled", namespace));
         }
 
-        String protocol = getEnv("KUBERNETES_MASTER_PROTOCOL", CUSTOM_ENV_PREFIX + "MASTER_PROTOCOL");
-        String masterHost = getEnv("KUBERNETES_SERVICE_HOST", CUSTOM_ENV_PREFIX + "MASTER_HOST");
-        String masterPort = getEnv("KUBERNETES_SERVICE_PORT", CUSTOM_ENV_PREFIX + "MASTER_PORT");
+        String protocol = getEnv(CUSTOM_ENV_PREFIX + "MASTER_PROTOCOL", "KUBERNETES_MASTER_PROTOCOL");
+        String masterHost = getEnv(CUSTOM_ENV_PREFIX + "MASTER_HOST", "KUBERNETES_SERVICE_HOST");
+        String masterPort = getEnv(CUSTOM_ENV_PREFIX + "MASTER_PORT", "KUBERNETES_SERVICE_PORT");
 
-        String clientCertificateFile = getEnv("KUBERNETES_CLIENT_CERTIFICATE_FILE", CUSTOM_ENV_PREFIX + "CLIENT_CERT_FILE");
-        String caCertFile = getEnv("KUBERNETES_CA_CERTIFICATE_FILE", CUSTOM_ENV_PREFIX + "CA_CERT_FILE");
+        String clientCertificateFile = getEnv(CUSTOM_ENV_PREFIX + "CLIENT_CERT_FILE", "KUBERNETES_CLIENT_CERTIFICATE_FILE");
+        String caCertFile = getEnv(CUSTOM_ENV_PREFIX + "CA_CERT_FILE", "KUBERNETES_CA_CERTIFICATE_FILE");
         if (caCertFile == null) {
             caCertFile = "/var/run/secrets/kubernetes.io/serviceaccount/ca.crt";
         }
@@ -71,7 +71,7 @@ public class KubernetesMembershipProvider extends CloudMembershipProvider {
             if (protocol == null) {
                 protocol = "https";
             }
-            String saTokenFile = getEnv("SA_TOKEN_FILE", CUSTOM_ENV_PREFIX + "SA_TOKEN_FILE");
+            String saTokenFile = getEnv(CUSTOM_ENV_PREFIX + "SA_TOKEN_FILE", "SA_TOKEN_FILE");
             if (saTokenFile == null) {
                 saTokenFile = "/var/run/secrets/kubernetes.io/serviceaccount/token";
             }
@@ -94,11 +94,11 @@ public class KubernetesMembershipProvider extends CloudMembershipProvider {
             streamProvider = new CertificateStreamProvider(clientCertificateFile, clientKeyFile, clientKeyPassword, clientKeyAlgo, caCertFile);
         }
 
-        String ver = getEnv("KUBERNETES_API_VERSION", CUSTOM_ENV_PREFIX + "API_VERSION");
+        String ver = getEnv(CUSTOM_ENV_PREFIX + "API_VERSION", "KUBERNETES_API_VERSION");
         if (ver == null)
             ver = "v1";
 
-        String labels = getEnv("KUBERNETES_LABELS", CUSTOM_ENV_PREFIX + "LABELS");
+        String labels = getEnv(CUSTOM_ENV_PREFIX + "LABELS", "KUBERNETES_LABELS");
 
         namespace = URLEncoder.encode(namespace, "UTF-8");
         labels = labels == null ? null : URLEncoder.encode(labels, "UTF-8");
diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml
index 2041539..82c6ea9 100644
--- a/webapps/docs/changelog.xml
+++ b/webapps/docs/changelog.xml
@@ -66,6 +66,15 @@
       </scode>
     </changelog>
   </subsection>
+  <subsection name="Cluster">
+    <changelog>
+      <fix>
+        Fix cloud environment lookup order and add a dedicated
+        <code>DNS_MEMBERSHIP_SERVICE_NAME</code> environment for use with the
+        DNS membership provider. Submitted by Bernd Bohmann. (remm)
+      </fix>
+    </changelog>
+  </subsection>
   <subsection name="Other">
     <changelog>
       <add>


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org