kubernetes openshift源上的serviceDns的hazelcast发现服务失败

问题描述

我正在将spring-boot应用程序部署到kubernetes openshift。 在此应用程序中,我将Hazelcast用作我现在正在测试的缓存提供程序。 Hazelcast应该充当嵌入式缓存管理器,并与其他Pod形成p2p云。 (没有主人)。 作为一种发现机制,我使用hazelcast-kubernetes,它是通过以下方式进行编程配置的:

@Bean
    public HazelcastInstance configHazelcastInstance(HazelcastProperties properties) {
        if (Strings.isNullOrEmpty(properties.getServicedns()) || Strings.isNullOrEmpty(properties.getNamespace()))
            return Hazelcast.newHazelcastInstance();

        Config cfg = new Config();

        NetworkConfig networkConfig = cfg.getNetworkConfig();

        JoinConfig joinConfig = networkConfig.getJoin();

        joinConfig.getMulticastConfig().setEnabled(false);
        joinConfig.getTcpIpConfig().setEnabled(false);
        joinConfig.getAwsConfig().setEnabled(false);
        joinConfig.getAzureConfig().setEnabled(false);
        joinConfig.getEurekaConfig().setEnabled(false);
        joinConfig.getGcpConfig().setEnabled(false);
        joinConfig.getKubernetesConfig().setEnabled(true);

        final HazelcastKubernetesdiscoveryStrategyFactory factory = new HazelcastKubernetesdiscoveryStrategyFactory();

        final discoveryStrategyConfig strategyConfig = new discoveryStrategyConfig(factory);
        strategyConfig.addProperty("service-dns",properties.getServicedns());
        strategyConfig.addProperty("service-dns-timeout","10");

        joinConfig.getdiscoveryConfig().adddiscoveryStrategyConfig(strategyConfig);

        return Hazelcast.newHazelcastInstance(cfg);
    }

我在应用程序启动时收到的消息为:

[main] WARN  c.h.s.d.integration.discoveryService - [10.129.2.253]:5701 [dev] [3.12.9] DNS lookup for servicedns 'productizer.dev-product-configuration.svc.cluster.local' Failed

当我执行nslookup ...时(抱歉,无法复制终端):

enter image description here

因此看来servicedns名称存在,但是hazelcast无法以某种方式解决它。

请问您可以建议下一步吗?

编辑: 与:

@Bean
    public HazelcastInstance configHazelcastInstance(HazelcastProperties properties) {
        if (Strings.isNullOrEmpty(properties.getServicedns()) || Strings.isNullOrEmpty(properties.getNamespace()))
            return Hazelcast.newHazelcastInstance();

        Config cfg = new Config();

        NetworkConfig networkConfig = cfg.getNetworkConfig();

        JoinConfig joinConfig = networkConfig.getJoin();

        joinConfig.getMulticastConfig().setEnabled(false);
        joinConfig.getKubernetesConfig().setEnabled(true);
        joinConfig.getKubernetesConfig().setProperty("service-dns",properties.getServicedns());
        joinConfig.getKubernetesConfig().setProperty("namespace",properties.getNamespace());
        joinConfig.getKubernetesConfig().setProperty("service-dns-timeout","10");

        log.info(joinConfig.toString());

        return Hazelcast.newHazelcastInstance(cfg);
    }

我得到:

2020-10-22T15:31:13,767Z    [hz._hzInstance_1_dev.cached.thread-2] INFO  com.hazelcast.nio.tcp.TcpIpConnector - [10.129.2.18]:5701 [dev] [3.12.9] Connecting to /10.128.2.214:5701,timeout: 10000,bind-any: true
2020-10-22T15:31:13,781Z    [hz._hzInstance_1_dev.IO.thread-in-0] INFO  c.hazelcast.nio.tcp.TcpIpConnection - [10.129.2.18]:5701 [dev] [3.12.9] Initialized new cluster connection between /10.129.2.18:58892 and /10.128.2.214:5701
2020-10-22T15:31:14,774Z    [hz._hzInstance_1_dev.priority-generic-operation.thread-0] ERROR com.hazelcast.cluster - [10.129.2.18]:5701 [dev] [3.12.9] Node Could not join cluster. A Configuration mismatch was detected: Incompatible joiners! expected:,found: tcp-ip Node is going to shutdown Now!

在openshift上启动时。

所以我登录joinConfig

c.f.p.c.HazelcastCacheConfiguration - JoinConfig{multicastConfig=MulticastConfig [enabled=false,multicastGroup=224.2.2.3,multicastPort=54327,multicastTimetoLive=32,multicastTimeoutSeconds=2,trustedInterfaces=[],loopbackModeEnabled=false],tcpIpConfig=TcpIpConfig [enabled=false,connectionTimeoutSeconds=5,members=[],requiredMember=null],awsConfig=AliaseddiscoveryConfig{tag='aws',enabled=false,usePublicIp=false,properties={}},gcpConfig=AliaseddiscoveryConfig{tag='gcp',azureConfig=AliaseddiscoveryConfig{tag='azure',kubernetesConfig=AliaseddiscoveryConfig{tag='kubernetes',enabled=true,properties={namespace=dev-product-configuration,service-dns-timeout=10,service-dns=productizer.dev-product-configuration.svc.cluster.local}},eurekaConfig=AliaseddiscoveryConfig{tag='eureka',discoveryConfig=discoveryConfig{discoveryStrategyConfigs=[],discoveryServiceProvider=null,nodeFilter=null,nodeFilterClass='null'}}

榛果广播:3.12.9

hazelcast-kubernetes:1.3.1

解决方法

您的配置不正确。应该是这样的:

        joinConfig.getMulticastConfig().setEnabled(false);
        joinConfig.getKubernetesConfig().setEnabled(true);
        joinConfig.getKubernetesConfig().setProperty("service-dns",properties.getServiceDns());
        joinConfig.getKubernetesConfig().setProperty("service-dns-timeout","10");

您无需创建HazelcastKubernetesDiscoveryStrategyFactory

更多信息,请访问: