k8s Kubernetes Frp 内网WordPress穿透配置

之前的架构图前面添加了一个洛杉矶的服务器,访问会绕全国一圈,这次使用腾讯云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. <span>apiVersion</span> <span>:</span> <span> v1</span>
  2. <span>kind</span> <span>:</span> <span> </span> <span>ConfigMap</span>
  3. <span>metadata</span> <span>:</span>
  4. <span> name</span> <span>:</span> <span> frps</span>
  5. <span> </span> <span>namespace</span> <span>:</span> <span> wordpress</span>
  6. <span>data</span> <span>:</span>
  7. <span> frpc</span> <span>.</span> <span>ini</span> <span>:</span> <span> </span> <span>|-</span>
  8. <span> </span> <span>[</span> <span>common</span> <span>]</span>
  9. <span> token</span> <span>=</span> <span>xxxx </span> <span>#token没有可以不写,frps中设置好了,这里就可以填写</span>
  10. <span> server_addr </span> <span>=</span> <span> </span> <span>#公有云IP</span>
  11. <span> server_port </span> <span>=</span> <span> </span> <span>#31000 公有云端口</span>
  12. <span> log_level</span> <span>=</span> <span>info</span>
  13. <span> </span> <span>[</span> <span>wordpress</span> <span>-</span> <span>i4t</span> <span>]</span>
  14. <span> type </span> <span>=</span> <span> tcp</span>
  15. <span> local_ip</span> <span>=</span> <span>wordpress</span> <span>-</span> <span>svc </span> <span>#这里我填写的是本地的svc地址</span>
  16. <span> local_port</span> <span>=</span> <span>80</span>
  17. <span> remote_port</span> <span>=</span> <span>31001</span>

创建frpc comfigmap

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

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

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

检查pod启动日志

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

访问测试

frp 服务器:frpc配置端口

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

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

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

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

效果图

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

编辑wordpress wp-config.php文件

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

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

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

访问效果图