【问题标题】:kubectl through load balancerkubectl 通过负载均衡器
【发布时间】:2018-10-27 17:28:38
【问题描述】:

流程:
带有 api 服务器 (https://192.168.0.10:6443) 负载均衡器 (10.10.0.2) 笔记本电脑的 kubernetes 集群。

想法:
我想从我的笔记本电脑上运行 kubectl 指向负载均衡器,其中 reveres 代理会将我重定向到 api 服务器。

步骤:
- 我将 kubeconfig(在我的笔记本电脑上)文件中的服务器 IP 更改为 LB 的 IP:
https://192.168.0.10:6443http://10.10.0.2:8080/
- 我是这样配置 nginx 的:

server {
    listen 8080 default_server;
    listen [::]:8080 default_server;
    server_name _;
    location / {
            proxy_pass https://192.168.0.10:6443;
    }
}

现在运行例如 kubectl get nodes 我希望得到节点列表,但它不起作用:

错误:您必须登录到服务器(未经授权)

$ curl http://10.10.0.2:8080/
{
  "kind": "Status",
  "apiVersion": "v1",
  "metadata": {

  },
  "status": "Failure",
  "message": "Unauthorized",
  "reason": "Unauthorized",
  "code": 401

如果我添加到 nginx 配置中:

ssl on;
ssl_certificate /root/certs/admin-k-master-1.pem;
ssl_certificate_key /root/certs/admin-k-master-1-key.pem;

并将 kubeconfig 文件服务器 IP 更改为 https://10.10.0.2:8080/

$ kubect get nodes
Unable to connect to the server: x509: certificate is valid for 192.168.0.10 not 10.10.0.2

有类似的topic,但与kubectl无关。

我怎样才能做到这一点?或者我做错了什么。

【问题讨论】:

    标签: kubernetes load-balancing kubectl


    【解决方案1】:

    其中一种解决方案是添加到 nginx 配置文件中:

    proxy_pass 127.0.0.1:8001;

    并在负载均衡器实例中运行:

    kubectl 代理。

    然后就可以了。

    【讨论】:

      【解决方案2】:

      我想从我的笔记本电脑上运行 kubectl 指向负载均衡器,reveres 代理会将我重定向到 api 服务器。

      • 这就是我们为外部访问配置此类负载均衡器的方式。请注意,您需要某种 ssl 证书才能与 ssl all-accross 一起使用。我们确实为 my-domain.com(即 kubernetes.my-domain.com)准备了适当的证书,但您可能必须根据您的实际 ip/dns 名称尝试自签名。另请注意,kubernetes 是我们集群的名称,因此如果您的名称不同,您还必须更新上游参考。

        upstream kube {
           server kubernetes:443;
        }
        
        server {
           listen 80;
           server_name kubernetes.my-domain.com;
           root /nowhere;
           rewrite ^ https://kubernetes.my-domain.com$request_uri permanent;
         }
        
        server {
           listen 443 ssl;
           server_name kubernetes.my-domain.com;
        
           ssl_certificate      /etc/nginx/ssl/kubernetes.my-domain.com.crt;
           ssl_certificate_key  /etc/nginx/ssl/kubernetes.my-domain.com.key;
        
           location / {
             proxy_set_header        Host $host:$server_port;
             proxy_set_header        X-Real-IP $remote_addr;
             proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
             proxy_set_header        X-Forwarded-Proto $scheme;
             proxy_redirect http:// https://;
             proxy_pass              https://kube;
             # Required for new HTTP-based CLI
             proxy_http_version 1.1;
             proxy_request_buffering off;
             proxy_buffering off; # Required for HTTP-based CLI to work over SSL
           }
        }
        

      【讨论】:

      • 我按照你的方式得到了,如果我使用 curl: 'Unauthorized',如果 kubectl: 'Unable to connect to server: x509: certificate is valid for not '
      【解决方案3】:

      将 10.10.0.2 放入 openssl.cnf 的 'alt_name' 部分并重建您的 apiserver 密钥对,然后 apiserver 将对 10.10.0.2 的查询视为有效。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-12-07
        • 2015-12-04
        • 1970-01-01
        • 2011-09-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-25
        相关资源
        最近更新 更多