k8s Kubernetes Frp 内网WordPress穿透配置

2023年 8月 13日 95.6k 0

之前的架构图前面添加了一个洛杉矶的服务器,访问会绕全国一圈,这次使用腾讯云hk节点部署frps,并且本地设置nginx proxy_pass代理frps端口。将流量数据采用tcp协议的方式,发送给老家的k8s网络中,其中frpc直接local ip修改为wordpress-svc,pod节点修改为2个pod进行访问测试,并且配置https。

架构图

环境说明

  • Kubernetes 1.24
  • WordPress 6.2
  • frpc 0.33
  • Nginx 1.22.1

博客测试环境运行在山东威海老家的内网的k8s容器网络中,有的时候需要在北京远程访问进行测试。显然,nat网络是无法直接远程通过80端口访问的,所以采用frp的方式进行访问,直接部署个pod快速配置!

关于frps部署可以参考博客其它文章,都是二进制文件,和frpc的配置基本上一模一样,修改一下对应的配置即可;我这里就不单独说了

创建frpc configmap

  1. apiVersion: v1
  2. kind: ConfigMap
  3. metadata:
  4. name: frps
  5. namespace: wordpress
  6. data:
  7. frpc.ini: |-
  8. [common]
  9. token=xxxx #token没有可以不写,frps中设置好了,这里就可以填写
  10. server_addr = #公有云IP
  11. server_port = #31000 公有云端口
  12. log_level=info
  13. [wordpress-i4t]
  14. type = tcp
  15. local_ip=wordpress-svc #这里我填写的是本地的svc地址
  16. local_port=80
  17. remote_port=31001

创建frpc comfigmap

  1. [root@k8s-01 frpc]# kubectl create -f frpc-cm.yaml
  2. configmap/frpc created
  3. [root@k8s-01 frpc]# kubectl get cm -n wordpress
  4. NAME DATA AGE
  5. frpc 1 4s
  6. istio-ca-root-cert 1 3d9h
  7. kube-root-ca.crt 1 3d9h
  8. wordpress-configmap 2 3d3h

接下来我们创建frpc deployment,我这里还是统一的放在wordpress namespace下,后续方便统一管理

  1. [root@k8s-01 frpc]# cat frpc-deployment.yaml
  2. apiVersion: apps/v1
  3. kind: Deployment
  4. metadata:
  5. name: frpc
  6. namespace: wordpress
  7. labels:
  8. app: frpc
  9. spec:
  10. replicas: 1
  11. selector:
  12. matchLabels:
  13. app: frpc
  14. template:
  15. metadata:
  16. labels:
  17. app: frpc
  18. spec:
  19. containers:
  20. - name: frpc
  21. image: snowdreamtech/frpc:0.33.0
  22. volumeMounts:
  23. - name: frpc
  24. mountPath: "/etc/frp"
  25. readOnly: true
  26. volumes:
  27. - configMap:
  28. defaultMode: 420
  29. name: frpc
  30. name: frpc
  31. #这里挂载configmap,请根据名称自行修改

检查pod启动日志

  1. [root@k8s-01 frpc]# kubectl get pod -n wordpress
  2. NAME READY STATUS RESTARTS AGE
  3. centos-client-75f686d587-lv2b2 1/1 Running 0 3d2h
  4. frpc-5dffdf574-pqld7 1/1 Running 3 (38s ago) 66s
  5. mysql-7fddbb85bb-xzcmf 1/1 Running 0 3d9h
  6. wordpress-deployment-5748d8485-4bfzt 1/1 Running 0 2d6h
  7. wordpress-deployment-5748d8485-9qvrb 1/1 Running 0 2d6h
  8. #这里为frpc pod日志
  9. [root@k8s-01 frpc]# kubectl logs -f -n wordpress frpc-5dffdf574-pqld7
  10. 2023/08/12 16:33:13 [I] [service.go:282] [47ead06b4b174641] login to server success, get run id [47ead06b4b174641], server udp port [0]
  11. 2023/08/12 16:33:13 [I] [proxy_manager.go:144] [47ead06b4b174641] proxy added: [wordpress-i4t]
  12. 2023/08/12 16:33:13 [I] [control.go:179] [47ead06b4b174641] [wordpress-i4t] start proxy success
  13. ^C

访问测试

frp 服务器:frpc配置端口

实际上到这里已经配置完毕,因为frpc不需要svc访问地址。 只是一个客户端~

根据情况配置,如果需要nginx这里可以提供nginx upsteam配置文件,代理本地ip:xxx 端口
nginx 需要在frps服务器上配置

我这里需要使用nginx配置文件,这里我就直接在frps服务器上添加了

  • 这里是代理的80端口,443可以参考下面的
  1. [root@VM-8-10-centos conf.d]# cat wp-test.conf
  2. server {
  3. listen 80;
  4. listen [::]:80;
  5. server_name i4t.cn www.i4t.cn;
  6. location /
  7. {
  8. proxy_pass http://127.0.0.1:31001;
  9. proxy_http_version 1.1;
  10. proxy_set_header X-Real-IP $remote_addr;
  11. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  12. proxy_set_header Upgrade $http_upgrade;
  13. proxy_set_header Connection "upgrade";
  14. proxy_set_header Host $http_host;
  15. }
  16. }

效果图

  • 添加nginx 443端口
  • wp-config.php添加https开启代码 (这两个选择一个即可)
  • 还需要提前在wordpress上开启https

编辑wordpress wp-config.php文件

  1. $_SERVER['HTTPS'] = 'ON'; //设置Wordpress https
  2. #找到下面的配置,在它上面添加SERVER [HTTPS] = ON选项
  3. /** Absolute path to the WordPress directory. */
  4. if ( ! defined( 'ABSPATH' ) ) {
  5. define( 'ABSPATH', __DIR__ . '/' );
  6. }

证书路径/data/i4t.crt/data/i4t.key,请注意自行替换

  • proxy_pass 地址需要自行修改
  1. [root@VM-8-10-centos conf.d]# cat wp-test.conf
  2. server {
  3. listen 80;
  4. listen [::]:80;
  5. server_name www.i4t.cn i4t.cn;
  6. return 301 https://i4t.cn$request_uri;
  7. }
  8. server {
  9. listen 443 ssl http2;
  10. listen [::]:443 http2;
  11. ssl_certificate /data/i4t.crt;
  12. ssl_certificate_key /data/i4t.key;
  13. ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
  14. ssl_ciphers TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-GCM-SHA256:TLS13-AES-128-CCM-8-SHA256:TLS13-AES-128-CCM-SHA256:EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+ECDSA+AES128:EECDH+aRSA+AES128:RSA+AES128:EECDH+ECDSA+AES256:EECDH+aRSA+AES256:RSA+AES256:EECDH+ECDSA+3DES:EECDH+aRSA+3DES:RSA+3DES:!MD5;
  15. server_name i4t.cn www.i4t.cn;
  16. index index.html index.htm;
  17. error_page 400 = /400.html;
  18. ssl_early_data on;
  19. ssl_stapling on;
  20. ssl_stapling_verify on;
  21. location /
  22. {
  23. #防止跨域
  24. add_header 'Access-Control-Allow-Origin' $http_origin;
  25. add_header 'Access-Control-Allow-Credentials' 'true';
  26. add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
  27. add_header 'Access-Control-Allow-Headers' 'DNT,web-token,app-token,Authorization,Accept,Origin,Keep-Alive,User-Agent,X-Mx-ReqToken,X-Data-Type,X-Auth-Token,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
  28. add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
  29. if ($request_method = 'OPTIONS') {
  30. add_header 'Access-Control-Max-Age' 1728000;
  31. add_header 'Content-Type' 'text/plain; charset=utf-8';
  32. add_header 'Content-Length' 0;
  33. return 204;
  34. }
  35. proxy_pass http://127.0.0.1:31001;
  36. proxy_http_version 1.1;
  37. proxy_set_header X-Real-IP $remote_addr;
  38. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  39. proxy_set_header Upgrade $http_upgrade;
  40. proxy_set_header Connection "upgrade";
  41. proxy_set_header Host $http_host;
  42. }
  43. }

访问效果图

相关文章

KubeSphere 部署向量数据库 Milvus 实战指南
探索 Kubernetes 持久化存储之 Longhorn 初窥门径
征服 Docker 镜像访问限制!KubeSphere v3.4.1 成功部署全攻略
那些年在 Terraform 上吃到的糖和踩过的坑
无需 Kubernetes 测试 Kubernetes 网络实现
Kubernetes v1.31 中的移除和主要变更

发布评论