【K8S】【minikube】使用nginx反向代理实现外部访问apiserver

外部访问方式一览

  • nginx反向代理
    使用方式:主机安装nginx,修改nginx.conf文件增加stream模块并配置proxy_pass,如下
#四层TCP反向代理案例
stream {
  server {
      # 代理服务器,外部流量会通过此处流向内部服务器,如192.168.1.2
      listen 192.168.1.2:80;  
      # 内部服务器,如172.20.1.2
      proxy_pass 172.20.1.2:80;
  }
}

说明:可以只通过流量,不处理证书,且适用范围,支持四层、七层代理方式

  • kubectl proxy
    说明:在localhost和k8s的apiserver之间创建一个代理服务或者应用级网关,支持http流量,可以转发一些前端http访问之类
常见用法:
kubectl proxy --address=’x.x.x.x’ –-port=xx –api-prefix=/ –accept-hosts=’^.*’
--address: 一般是0.0.0.0或者主机的IP  
--port:默认为8001  
--api-prefix:代理的API服务的前缀,默认是/,也就是全部代理
  • kubectl port-forward
    说明:本地端口的连接转发到 pod 上的端口,支持tcp流量转发,适用范围比kubectl proxy广
常见用法:
kubectl port-forward 资源类型/资源名称 Pod端口:主机端口 --address=’0.0.0.0′  
--address:  默认为127.0.0.1,但是在minikube在内网这种情况下,指向的是minikube内部,需要指向主机则需要指定0.0.0.0或主机IP

nginx反向代理:使用kubectl外部访问minikube

使用场景

  • 主机A:minikue所在主机上,CentOS7.9.2009操作系统,IP为192.168.1.2
  • 主机B:安装了kuebctl的同局域网主机,IP为192.168.1.3
  • minikube部署时会默认新建一个当前主机和集群才访问的内部网络,可以指定这个网络的CIDR,默认使用的是192.168.49.0/24
  • minikube的内部网络,因为与主机A的网关和路由设备不在同一级,因此与主机网络中其他主机(如主机B)无法互通

整体思路

参考A How To Guide: Remotely Accessing Minikube Kubernetes on KVM 改为docker版本

  • 主机A部署minikube,使用–-apiserver-ips参数设置为当前主机IP,即192.168.1.2
  • 主机A直接安装nginx,设置反向代理,只通过流量而不处理SSL和证书,让我们们可以使用minikube生成的证书,使用代理的IP与端口访问内部的apiserver
  • 反向代理设置主机A的IP和端口,转发到minikube的apiserver的IP和端口
  • 修改kubectl的config文件使用主机A的IP和端口后也可以访问
    注1:–-apiserver-ips:一组在为 kubernetes 生成的证书中使用的 apiserver IP 地址。如果您希望将此 apiserver设置为可从机器外部访问,则可以使用这组 apiserver ip地址

执行步骤

  • 部署minikube
minikube start --force --driver=docker --container-runtime=containerd  --cni calico --apiserver-ips=192.168.1.6 --registry-mirror=https://registry.docker-cn.com
参数说明:
--force:满足条件时可选,此处用于docker在root下启动,指定非root用户部署时可不加
--driver=docker:必选,虚拟化引擎指定为docker
--container-runtime=containerd:kuberntest版本大于1.24时看k8s官方弃用dockershim,因此docker drive的CRI必须使用containerd 
--cni calico:可选,推荐网络方案使用calico,比默认的flannel强,虽然单节点网络方案选哪个也差不了多少
  • minikube就绪后,执行命令的集群信息,获取apiserver服务IP及端口
kubectl cluster-info
# 如返回如下,则apiserver为192.168.49.2:8443
Kubernetes control plane is running at https://192.168.49.2:8443
  • 主机A上通过yum安装nginx
# 添加ngixn的yum源
rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
# 安装nginx
yum install -y nginx
# 开启并设置自启动
systemctl start nginx
systemctl enable nginxnginx
  • 配置反向代理
# 找到nginx的配置文件,一般为/etc/nginx/nginx.conf,增加四层tcp反向代理
stream {
  server {
      listen 192.168.1.2:8443;  
      proxy_pass 192.168.49.2:8443;
  }
}
# 重新加载nginx配置文件并重启
nginx -s reload 
systemctl restart nginx
  • 修改kubeconfig文件并本地测试
# 修改~/.kube/config文件中的server,将192.168.49.2修改为192.168.1.2并保存
# 使用minikube自带的minikube kubectl工具,执行任意kubectl查看是否正常,如
minikube kubectl -- get node
# 此时执行kubectl cluster-info应该是显示为192.168.1.2,如
minikube kubectl -- cluster-info
返回:
Kubernetes control plane is running at https://192.168.1.2:8443
  • 登录主机B安装kubectl工具
# 如果是linux,则执行以下命令获取
kubectlcurl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
# 安装kubectl
install -o root -g root -m 0755 kubectl /usr/bin/kubectl
# 查看版本
kubectl version --client
  • 主机A上查看kubeconfig文件,获取证书地址
# 查看kubeconfig的内容
cat ~/.kube/config
# 查看ca.crt、client-certificate、client-key文件的位置
如
- cluster:
    certificate-authority: /root/.minikube/ca.crt
......
- name: minikube
  user:
    client-certificate: /root/.minikube/profiles/minikube/client.crt
    client-key: /root/.minikube/profiles/minikube/client.key
  • 拷贝kubeconfig文件和https证书到主机B上配置kubectl
# 在主机B上创建存放config和https证书的目录,如
mkdir -p /root/.kube/
mkdir -p /root/.minikube/profiles/minikube
# 拷贝主机A的文件到主机B上
scp root@192.168.1.2:/root/.kube/config /root/.kube/
scp root@192.168.1.2:/root/.minikube/profiles/minikube/client.crt /root/.minikube/profiles/minikube/
scp root@192.168.1.2:/root/.minikube/profiles/minikube/client.key /root/.minikube/profiles/minikube/
# 执行命令验证,返回与主机A结果一致
kubectl cluster-info
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您可以使用Nginx作为反向代理,将请求转发到Harbor的后端,并通过启用HTTPS来安全访问Harbor。以下是一个示例配置: 首先,确保您已经安装了Nginx,并且已经生成了有效的SSL证书。 1. 打开Nginx的配置文件(通常在`/etc/nginx/nginx.conf`或`/etc/nginx/conf.d/default.conf`)。 2. 在`http`块中添加以下配置,用于设置反向代理和HTTPS访问: ``` server { listen 80; server_name your_domain.com; location / { proxy_pass http://harbor_backend_ip:harbor_backend_port; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } server { listen 443 ssl; server_name your_domain.com; ssl_certificate /path/to/ssl_certificate.crt; ssl_certificate_key /path/to/ssl_certificate.key; location / { proxy_pass http://harbor_backend_ip:harbor_backend_port; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } ``` 请确保将`your_domain.com`替换为您的域名,并将`harbor_backend_ip`和`harbor_backend_port`替换为Harbor后端实际的IP地址和端口。 3. 将您的SSL证书和私钥文件路径替换为正确的路径。 4. 保存并关闭配置文件。 5. 重新加载Nginx配置以使更改生效: ``` sudo systemctl reload nginx ``` 现在,您应该能够通过`https://your_domain.com`访问Harbor,并且Nginx会将请求代理到Harbor后端。请确保在防火墙中打开相应的端口(80和443)以允许流量通过。 希望这可以帮助到您!如有任何问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值