如何在Kubernetes中通过指定域名对外暴露WordPress服务
方案说明
Ingress完全适配你当前的域名访问、多WordPress实例调度的需求,核心通过Ingress控制器实现七层路由规则,将不同域名的请求转发到对应的后端WordPress服务。具体操作步骤如下:
1. 部署Ingress控制器
首先需要在集群中部署Ingress控制器,推荐使用NGINX Ingress Controller:
- 执行官方部署清单完成安装,部署后执行以下命令查看控制器服务状态,获取EXTERNAL-IP(即后续所有域名解析指向的目标IP):
kubectl get svc -n ingress-nginx ingress-nginx-controller
2. 配置域名解析
将你需要使用的所有WordPress访问域名(例如wp.example.com、blog.example.com等)的A记录,全部解析到上一步获取的Ingress控制器EXTERNAL-IP。
3. 单WordPress实例的Ingress配置
假设你已部署的WordPress服务名称为wordpress,服务开放端口为80,对应访问域名是wp.example.com,创建Ingress资源配置文件wp-ingress.yaml,内容如下:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: wp-example-ingress annotations: nginx.ingress.kubernetes.io/rewrite-target: /$1 spec: ingressClassName: nginx rules: - host: wp.example.com http: paths: - path: /(.*) pathType: Prefix backend: service: name: wordpress port: number: 80
执行命令kubectl apply -f wp-ingress.yaml使配置生效,配置完成后即可通过http://wp.example.com直接访问对应的WordPress实例。
4. 多WordPress实例配置
需要部署多个对应不同域名的WordPress实例时,先为每个实例创建独立的Deployment、Service、持久化存储卷声明,保证实例之间资源隔离,之后通过Ingress配置多域名路由规则即可,可在同一个Ingress资源中添加多条host规则,也可以为每个实例单独创建Ingress资源。
多规则配置示例如下:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: multi-wp-ingress annotations: nginx.ingress.kubernetes.io/rewrite-target: /$1 spec: ingressClassName: nginx rules: - host: wp.example.com http: paths: - path: /(.*) pathType: Prefix backend: service: name: wordpress port: number: 80 - host: blog.example.com http: paths: - path: /(.*) pathType: Prefix backend: service: name: wordpress-blog port: number: 80
如果需要HTTPS访问,可配合cert-manager实现免费证书自动签发,在Ingress配置中添加tls字段即可完成HTTPS配置。
内容的提问来源于stack exchange,提问作者Luca Cerretani

