流量:
带有api服务器的kubernetes集群(https://192.168.0.10:6443)< - >负载平衡器(10.10.0.2)< - >笔记本电脑。
观
从我的笔记本电脑我想运行kubectl指向负载均衡器,其中reveres代理将重定向到api服务器。
步骤:
- 我将kubeconfig(在我的笔记本电脑上)文件中的服务器IP更改为LB的IP:
是https://192.168.0.10:6443是http://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获取节点我希望得到节点列表,但它不起作用:
错误:您必须登录服务器(未授权)
$ curl http://10.10.0.2:8080/
{
"kind": "Status",
"apiVersion": "v1",
"metadata": {
},
"status": "Failure",
"message": "Unauthorized",
"reason": "Unauthorized",
"code": 401
如果我添加到nginx config:
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无关。
我怎样才能实现这一目标?或者我做错了什么。
答案 0 :(得分:0)
其中一个解决方案是添加到nginx配置文件:
proxy_pass 127.0.0.1:8001;
并在load-balancer实例中运行:
kubectl代理。
然后它有效。
答案 1 :(得分:0)
从我的笔记本电脑上我想运行指向负载均衡器的kubectl,其中尊重代理会将我重定向到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
}
}
答案 2 :(得分:0)
将10.10.0.2放入' alt_name' openssl.cnf的一部分并重建您的apiserver密钥对,然后apiserver会将对10.10.0.2的查询视为有效。