kubernetes内服务的偶尔未知主机异常

kubernetes内服务的偶尔未知主机异常,kubernetes,kops,kube-dns,Kubernetes,Kops,Kube Dns,我在AWS上安装了kubernetes群集。当我从pod调用elasticsearch-client.default.svc.cluster.local时,我偶尔会遇到未知主机异常。这一定与名称解析有关,因为直接命中服务IP效果很好 注意:我已经启用了kube dns自动缩放。我手动尝试了6个kube dns吊舱。所以我不认为这是因为dns吊舱的扩展 当我使用上游服务器值将kube dns configMap设置为google NameServer(8.8.8.8和8.8.4.4)时,我没有发现

我在AWS上安装了kubernetes群集。当我从pod调用elasticsearch-client.default.svc.cluster.local时,我偶尔会遇到未知主机异常。这一定与名称解析有关,因为直接命中服务IP效果很好

注意:我已经启用了kube dns自动缩放。我手动尝试了6个kube dns吊舱。所以我不认为这是因为dns吊舱的扩展

当我使用上游服务器值将kube dns configMap设置为google NameServer(8.8.8.8和8.8.4.4)时,我没有发现问题。我想这是因为AWS在路由53上进行了api速率限制。但是我不知道为什么名称解析请求会发送到AWS NS。

这里有一个可能与您的问题有关的好消息,也请查看Weaveworks提供的消息

基本上,去年在GitHub创建的一些问题与集群内的各种DNS延迟/问题有关

值得一提的是,尽管不是每个DNS相关问题的解决方案,但CoreDNS自版本
1.11以来通常可用,并且是或将是默认的,因此将取代
kube DNS
作为群集的默认DNS附加组件

以下是一些可能与您遇到的问题有关的问题:


希望这能帮助您向前迈进。

我的自定义Kubernetes集群以及MySQL和Solr也遇到了类似的问题。官方网站教程建议的Kube DNS检查很好(),我必须对数据源和Solr客户端应用以下重试逻辑:

...
import org.apache.commons.dbcp.BasicDataSource;
...
public class CommunicationSafeDataSource extends BasicDataSource {
  private static final Logger LOGGER = LoggerFactory.getLogger(CommunicationSafeDataSource.class);

  @Override
  public Connection getConnection() throws SQLException {
    for (int i = 1; i <= 10; i++) {
      try {
        return super.getConnection();
      } catch (Exception e) {
        if ((e instanceof CommunicationsException) || (e.getCause() instanceof CommunicationsException)) {
          LOGGER.warn("Communication exception occurred, retry " + i);
          try {
            Thread.sleep(i * 1000);
          } catch (InterruptedException ie) {
            //
          }
        } else {
          throw e;
        }
      }
    }

    throw new IllegalStateException("Cannot get connection");
  }
}
。。。
导入org.apache.commons.dbcp.BasicDataSource;
...
公共类通信安全数据源扩展基本数据源{
私有静态最终记录器Logger=LoggerFactory.getLogger(CommunicationSafeDataSource.class);
@凌驾
公共连接getConnection()引发SQLException{
对于(int i=1;i
...
import org.apache.solr.client.solrj.impl.HttpSolrClient;
...
public class CommunicationSafeSolrClient extends HttpSolrClient {

  private static final Logger LOGGER = LoggerFactory.getLogger(CommunicationSafeSolrClient.class);

  protected CommunicationSafeSolrClient(Builder builder) {
    super(builder);
  }

  @Override
  protected NamedList<Object> executeMethod(HttpRequestBase method, ResponseParser processor, boolean isV2Api)
      throws SolrServerException {
    for (int i = 1; i <= 10; i++) {
      try {
        return super.executeMethod(method, processor, isV2Api);
      } catch (Exception e) {
        if ((e instanceof UnknownHostException) || (e.getCause() instanceof UnknownHostException)
        || (e instanceof ConnectException) || (e.getCause() instanceof ConnectException)) {
          LOGGER.warn("Communication exception occurred, retry " + i);
          try {
            Thread.sleep(i * 1000);
          } catch (InterruptedException ie) {
            //
          }
        } else {
          throw e;
        }
      }
    }

    throw new IllegalStateException("Cannot execute method");
  }
}