我已经从7.x升级到了Elastic 8.x。现在我的弹性端点需要使用https连接,并提供用户名、密码和tls证书。
参见示例here。
如果我在我的kubernetes集群中使用这种方法只是为了测试连接性,我可以从我的应用程序的容器中 curl Elastic服务。首先,我必须导出tls cert并将cert复制到我的容器中。然后我可以 curl 服务(根据上面的链接):
curl --cacert tls.crt -u elastic:https://elasticsearch-cluster-es-http.eck:9200
{
"name" : "elasticsearch-cluster-es-default-1",
"cluster_name" : "elasticsearch-cluster",
"cluster_uuid" : "YqYl-gTpRd-URcoDhW5t1w",
"version" : {
"number" : "8.11.2",
"build_flavor" : "default",
"build_type" : "docker",
"build_hash" : "76013fa76dcbf144c886990c6290715f5dc2ae20",
"build_date" : "2023-12-05T10:03:47.729926671Z",
"build_snapshot" : false,
"lucene_version" : "9.8.0",
"minimum_wire_compatibility_version" : "7.17.0",
"minimum_index_compatibility_version" : "7.0.0"
},
"tagline" : "You Know, for Search"
}
字符串
我现在如何更新我的dotnet logger配置来处理新的https、username:password和tls cert要求?我尝试了以下方法但没有成功(也尝试了指纹):
var elasticOptions = new ElasticsearchSinkOptions(new Uri($"https://{elasticServer}"))
{
AutoRegisterTemplate = true,
IndexDecider = (@event, offset) =>
string.Format("{0}-{1}-{2:yyyy.MM.dd}", k8sNamespace, appName, offset),
ModifyConnectionSettings = (settings) =>
{
settings.EnableApiVersioningHeader();
settings.ClientCertificate(new X509Certificate2(crtBytes));
settings.BasicAuthentication("elastic", "<password>");
settings.DeadTimeout(TimeSpan.FromSeconds(300));
return settings;
}
};
型
我在应用程序中看到以下错误:
System.Net.Http.HttpRequestException: The SSL connection could not be established, see inner exception.
---> System.Security.Authentication.AuthenticationException: The remote certificate is invalid because of errors in the certificate chain: UntrustedRoot
型
dotnet 8 serilog. sink.elasticsearch:9.0.3 elasticsearch eck:8.11.2
1条答案
按热度按时间bqjvbblv1#
我通过从Kubernetes中抓取Elastic CA secret(name-es-http-ca-internal)并将其添加到我的应用程序docker文件中的ca-certificates.crt文件来解决这个问题:
字符串
以上crt是从公共crt机密值(name-es-http-certs-public)中获得的
型
但是,我想我会采取禁用tls的方法,这样我就不必管理这些证书了。
https://www.elastic.co/guide/en/cloud-on-k8s/master/k8s-tls-certificates.html#k8s-disable-tls