kubernetes内服务的偶尔未知主机异常
我在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自版本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)时,我没有发现
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");
}
}