没有想到用k8s搭https版的wordpress能耗时这么久,还搭上了我的基友slash先生,既然这么费事,就记录下来吧。欢迎转载,转载请注明出处,谢谢。至于为什么我们的网站已经隐藏了server的版本,但是本文却大方地给出了实际版本,理由:任性,哈哈。

首先选用了kubeadm来启动一个单节点的k8s,runtime采用的是containerd,这样比较轻量,随着k8s进一步解耦docker,我也随波逐流,初始化的镜像仓库选择了docker.io/gotok8s,更新还是很及时的,本次采用了阿里云的镜像加速,下面是本次部署的大致架构图,图片来自slash,网站入口的nginx也是容器部署,采用hostnetwork。


wordpress镜像选用docker.io/library/wordpress:5.8.3-fpm,镜像默认不自带nginx,这里手动添加了nginx的镜像,wordpress用到数据库,这里选用了mysql,镜像为docker.io/library/mysql:5.7,服务用到的pvc均来自自建nfs做了stroageclass。网站的证书直接在腾讯云申请的,流程简单,免费好用(白嫖最香),缺点是有效期一年,一年后要重新申请。开始吧!

一、首先是mysql

采用无头的方式,单节点deployment部署,密码env挂载secret,secret有多种创建方式,如命令行

kubectl create secret mysql-pass --password='xxxxxx'
apiVersion: v1
kind: Service
metadata:name: mysqllabels:app: mysql
spec:ports:- port: 3306selector:app: mysqlclusterIP: None
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: mysql-pv-claimannotations:volume.beta.kubernetes.io/storage-class: "nfs-storage"labels:app: mysql
spec:accessModes:- ReadWriteOnceresources:requests:storage: 5Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:name: mysqllabels:app: mysql
spec:selector:matchLabels:app: mysqlstrategy:type: Recreatetemplate:metadata:labels:app: mysqlspec:containers:- image: docker.io/library/mysql:5.7imagePullPolicy: IfNotPresentname: mysqlenv:- name: MYSQL_ROOT_PASSWORDvalueFrom:secretKeyRef:name: mysql-passkey: passwordports:- containerPort: 3306name: mysqlvolumeMounts:- name: mysql-storagemountPath: /var/lib/mysqlvolumes:- name: mysql-storagepersistentVolumeClaim:claimName: mysql-pv-claim

apply后进入mysql的pod创建数据库wordpress。

二、wordpress的相关yaml

wordpress的pod中加入了nginx的容器,做了configmap挂载替换默认default.conf,nginx的configmap如下

apiVersion: v1
kind: ConfigMap
metadata:name: wordpress-configs
data:default.conf: |server {listen 80 default_server;client_max_body_size 20m;root /var/www/html;index index.php index.html index.htm;location ~ \.php$ {fastcgi_pass   127.0.0.1:9000;fastcgi_index  index.php;fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;include        fastcgi_params;}}

wordpress中的环境变量以secret的方式挂载,secret的yaml文件如下,自行修改user和password

apiVersion: v1
kind: Secret
metadata:name: wordpress-secrets
stringData:WORDPRESS_DB_HOST: "wordpress-mysql"WORDPRESS_DB_USER: "xxxxx"WORDPRESS_DB_PASSWORD: "xxxxx"

下面是wordpress相关的svc、pvc、deployment

apiVersion: v1
kind: Service
metadata:name: wordpress labels:app: wordpress
spec:ports:- name: httpport: 80targetPort: http selector:app: wordpresstype: ClusterIP
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: wp-pv-claimannotations:volume.beta.kubernetes.io/storage-class: "nfs-storage"labels:app: wordpress
spec:accessModes:- ReadWriteOnceresources:requests:storage: 5Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:name: wordpresslabels:app: wordpress
spec:selector:matchLabels:app: wordpressstrategy:type: Recreatetemplate:metadata:labels:app: wordpressspec:containers:- image: docker.io/library/wordpress:5.8.3-fpmname: wordpressenvFrom:- secretRef:name: wordpress-secretsvolumeMounts:- mountPath: /var/www/htmlname: storage- image: docker.io/nginx:1.21.0name: nginxports:- containerPort: 80name: httpvolumeMounts:- mountPath: /etc/nginx/conf.dname: configs- mountPath: /var/www/htmlname: storagevolumes:- name: storagepersistentVolumeClaim:claimName: wp-pv-claim- name: configsconfigMap:name: wordpress-configs

三、用于反向代理的nginx

配置文件也用configmap挂载,包括主配置文件nginx.conf和虚拟主机配置文件haifeihai.com.conf。
注意wordpress经过代理以后使用https时,静态资源还是http的方式请求,会导致无限跳转,所以可以在代理的nginx处加入 proxy_set_header X-Forwarded-Proto $scheme; 以解决这个问题,在wordpress的官方文档也提到了这个特性https://wordpress.org/support/article/administration-over-ssl/#using-a-reverse-proxy

apiVersion: v1
kind: ConfigMap
metadata:name: nginx-configs
data:nginx.conf: |user www-data;worker_processes auto;#error_log /var/log/nginx/error.log;pid /run/nginx.pid;# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.include /usr/share/nginx/modules/*.conf;events {worker_connections 10240;use epoll;}http {log_format  main  '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log  /var/log/nginx/access.log  main;server_names_hash_bucket_size 512;   server_tokens       off;sendfile            on;tcp_nopush          on;keepalive_timeout   65;types_hash_max_size 4096;gzip  on;gzip_min_length 1k;gzip_buffers 16 8k;gzip_comp_level 4;gzip_proxied any;gzip_typestext/xml application/xml application/atom+xml application/rss+xml application/xhtml+xmltext/javascript application/javascript application/x-javascripttext/x-json application/json application/x-web-app-manifest+jsontext/css text/plain text/x-componentfont/opentype application/x-font-ttf application/vnd.ms-fontobjectimage/x-icon image/svg+xml;gzip_disable "MSIE [1-6]\.(?!.*SV1)";include             /etc/nginx/mime.types;default_type        application/octet-stream;ssl_protocols TLSv1 TLSv1.1 TLSv1.2;ssl_session_cache shared:SSL:1m;ssl_session_timeout  10m;ssl_ciphers HIGH:!aNULL:!MD5;ssl_prefer_server_ciphers on;proxy_set_header Host $http_host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $remote_addr;proxy_set_header X-Forwarded-Proto $scheme;include /etc/nginx/conf.d/*.conf;}haifeihai.com.conf: |server {listen 80;listen 443 ssl;server_name  www.haifeihai.com haifeihai.com;ssl_certificate   ssl/tls.crt;ssl_certificate_key  ssl/tls.key;resolver 10.2.0.10;location /favicon.ico {return 204;}location / {if ($host ~ "^hai") {return 301 https://www.$http_host$request_uri;}if ($ssl_protocol = "") {return 301 https://$http_host$request_uri;}set $upstream_name wordpress.default.svc.cluster.local;proxy_pass   http://$upstream_name;}}

本次使用了https,所以将申请的免费证书以secret的形式挂载,创建tls类型的secret,自行修改获得的证书路径和私钥路径,tls类型的secret创建时会自动将key修改为tls.key和tls.crt的

kubectl create secret tls haifeihai-secret --cert=haifeihai.com_bundle.crt --key=haifeihai.com.key

反向代理ngixn的deployment,之前也提到了,为了方便解析,使用hostnetwork。

apiVersion: apps/v1
kind: Deployment
metadata:name: nginx
spec:selector:matchLabels:app: nginxstrategy:type: Recreatetemplate:metadata:labels:app: nginxspec:hostNetwork: truednsPolicy: ClusterFirstWithHostNetcontainers:- image: docker.io/nginx:1.21.0name: nginxvolumeMounts:- mountPath: /etc/nginx/nginx.confname: configssubPath: nginx.conf- mountPath: /etc/nginx/conf.d/default.confname: configssubPath: haifeihai.com.conf- mountPath: /etc/nginx/ssl/tls.crtname: certssubPath: tls.crt- mountPath: /etc/nginx/ssl/tls.keyname: certssubPath: tls.keyvolumes:- name: configsconfigMap:name: nginx-configs- name: certssecret:secretName: haifeihai-secrets

apply后便可以完成,到此便已完成了使用k8s部署https的wordpress。欢迎访问个人博客www.haifeihai.com

使用k8s搭建一个https的wordpress无坑版相关推荐

  1. 我的Serverless实战—基于Serverless搭建一个简单的WordPress个人博客图文详解-JJZ

    文正在参与 "100%有奖 | 我的Serverless 实战"征稿活动 活动链接:https://marketing.csdn.net/p/15940c87f66c68188cf ...

  2. k8s部署tomcat及web应用_k8s介绍 k8s搭建一个应用(mysql+tomcat)

    k8s介绍 k8s搭建一个应用(mysql+tomcat) kubetnetes介绍 官网 https://kubernetes.io/ Kubernetes也就是k8s Kubernetes是一个开 ...

  3. 从零开始搭建一个HTTPS网站

    转自:http://cjting.me/web2.0/2016-09-05-%E4%BB%8E%E9%9B%B6%E5%BC%80%E5%A7%8B%E6%90%AD%E5%BB%BA%E4%B8%8 ...

  4. 搭建一个https二级代理(完整可用版)

    本文的背景是,因为需要,我们需要搭建多层代理服务用于消息转发,同时也方便通过跳板机2进行访问互联网,话不多说,上主菜. 0x1 代理选择 现在的代理服务器非常多,如何选择也是一门学问,作者在写这篇文档 ...

  5. 手动搭建一个https服务器,并颁发证书

    1.下载安装openssl(用于生成秘钥颁发证书) mac自带 window:https://slproweb.com/products/Win32OpenSSL.html 2.生成CA证书,CA钥和 ...

  6. k8s安装部署步骤_30分钟无坑部署K8S单Master集群

    Jesse导读:11月9号,我在中国.NET开发者峰会(.NET Conf China 2019)上分享了之前ASP.NET Core和Kubernetes做微服务的经验,在10号的时候又联合张善友. ...

  7. 基于kubeadm快速部署kubernetes K8S V1.17.4集群-无坑完整版

    基于kubeadm快速部署kubernetes K8S V1.17.4集群,并部署Dashboard Web页面,实现可视化查看Kubernetes资源 主机配置规划 服务器名称(hostname) ...

  8. centos7 单机安装ELK7收集nginx日志 无坑版,肯定出图

    系统:centos7 ELK版本:7.8.0 java环境:11 1. 配置JDK #配置JDK11 mkdir /root/source/cd /root/sourcewget https://re ...

  9. 线程和进程总结(无坑版)

    我发现线程.进程这个知识点总是特别容易忘记,大三上,上操作系统课那会儿弄懂了,等到大四听到这个知识点又好像没学过那样.现在准备春招了看见这两个字眼有觉得很陌生了,可能是因为没有自己好好地总结所以就忘得 ...

最新文章

  1. review what i studied `date` - 2017-4-12
  2. python 基础之第四天
  3. Chat Ban 二分,等差数列(1300)
  4. android 8.0手机开服务端,Android 8.0 + Service开启方式兼容处理
  5. python-I/O-文件操作
  6. Android之ndk之gdb调试
  7. python的django_django能用来做什么
  8. Android版:验证手机号码的正则表达式 (转)
  9. 数据结构五——二叉树
  10. Android学习—Notification消息通知
  11. 读书笔记_打开量化投资的黑箱01
  12. float和position
  13. [转]find命令之exec
  14. abc物动量分析计算机视频,物动量ABC分类法
  15. 数据结构-银行业务模拟系统
  16. png转icon java_原创 | Java图片处理:ico格式转 PNG/JPG等格式
  17. 【小算法】求约数个数
  18. pandas数据分析京东评论者衣服购买情况pyecharts生成可视化图表
  19. unity wsad 鼠标_Unity键盘WASD实现物体移动|chu
  20. 【git之路】拉取远程分支到本地

热门文章

  1. 农村土地确权之例会纪要—— 新蔡县土地确权第七次例会会议纪要
  2. 向大师致敬:偶像-乔布斯
  3. 怎样利用好量价选股?量价应用法则有哪些?
  4. 【白板动画制作软件】万彩手影大师教程 | 发布GIF
  5. PHP在线横幅广告logo图标制作网站源码
  6. 在Android中使用Opus 1.3.1(Ndk编译使用Opus so库)
  7. PMP每年考几次,费用如何?
  8. android 搜索栏滑动跟随缩放和移动,缩放变形问题
  9. 计算机网络第二章(谢希仁第八版)
  10. 低压保护测控系统解决方案