kubernetes api使用无法访问的群集IP

时间:2015-10-18 02:26:27

标签: elasticsearch kubernetes

这很奇怪。我在设置过程中遗漏了什么

master kubernetes-elasticsearch-cluster # kubectl get svc kubernetes
NAME         LABELS                                    SELECTOR   IP(S)        PORT(S)
kubernetes   component=apiserver,provider=kubernetes   <none>     10.100.0.1   8080/TCP

我似乎无法从群集中的任何位置到达10.100.0.1地址。但是,某些其他clusterIP地址可从节点

访问
master kubernetes-elasticsearch-cluster # kubectl get svc elasticsearch
NAME            LABELS                                SELECTOR                              IP(S)            PORT(S)
elasticsearch   component=elasticsearch,role=client   component=elasticsearch,role=client   10.100.213.223   9200/TCP

我相信当我查看elasticsearch pods的日志时,这会导致我遇到的问题。

javax.ws.rs.ProcessingException: javax.net.ssl.SSLHandshakeException: SSLHandshakeException invoking https://10.100.0.1:8080/api/v1/namespaces/default/endpoints/elasticsearch-discovery: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

但如果我检查与另一个地址相同的路径,则会重新调整项目

# curl http://10.1.141.41:8080/api/v1/namespaces/default/endpoints/elasticsearch-discovery
{
  "kind": "Endpoints",
  "apiVersion": "v1",
  "metadata": {
......

2 个答案:

答案 0 :(得分:1)

您的堆栈跟踪实际上表示您可以到达10.100.0.1,但您的客户端无法验证Kubernetes apiserver提供的证书。如果要使用SSL进行连接,则应验证Kubernetes apiserver使用的证书是否为10.100.0.1作为主题备用名称字段中的IP,或者您可以使用服务的DNS名称(同样确保它在证书中列出)。

答案 1 :(得分:0)

首先,我必须制作证书     ./make-ca-cert.sh IP :, IP:10.0.0.1,DNS:kubernetes,DNS:kubernetes.default,DNS:kubernetes.default.svc,DNS:kubernetes.default.svc.cluster.local

然后我不得不更新kube api服务器和kube控制器 KUBE-API服务器

--client-ca-file=/srv/kubernetes/ca.crt
--tls-cert-file=/srv/kubernetes/server.cert
--tls-private-key-file=/srv/kubernetes/server.key
key
--    admission_control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota

kube-controller-manager

--root-ca-file=/srv/kubernetes/ca.crt
--service-account-private-key-file=/srv/kubernetes/server.key

然后我将ca.crt和kubecfg。{crt | key}更改为小兵,并从kubeconfig文件中正确调用它们 的/ var / lib中/ kubelet / kubeconfig

apiVersion: v1
kind: Config
users:
- name: kubelet
  user:
    client-certificate: /etc/ssl/private/kubecfg.crt
    client-key: /etc/ssl/private/kubecfg.key
clusters:
- name: cluster01
  cluster:
    certificate-authority: /etc/ssl/certs/ca.crt
contexts:
- context:
    cluster: cluster01
    user: kubelet
  name: service-account-context
current-context: service-account-context

最后感谢lewismarshall https://github.com/UKHomeOffice/docker-elasticsearch/blob/master/examples/kubernetes.md

我更新了所有rc-yaml文件。

我现在得到200!     掌握kubernetes-elasticsearch-cluster#curl http://10.244.52.18:9200     {       “身份”:200,     ....

现在我无法弄清楚为什么我无法在客户端节点上加载插件。

/ elasticsearch / bin / plugin -install royrusso / elasticsearch-HQ

线程“main”中的异常java.lang.IllegalArgumentException:无法解析占位符'DISCOVERY_SERVICE'