【Linux】k8s部署wordpress--使用ingress暴露服务

步骤+报错总结帖

配置参考:22|实战演练:玩转Kubernetes(2)-Kubernetes入门实战课-极客时间 (geekbang.org)

k8s集群信息:

基本架构:

一,部署 MariaDB(wordpress所需的数据库)

配置文件wp-maria.yml

apiVersion: v1
kind: ConfigMap
metadata:
  name: maria-cm

data:
  DATABASE: 'db'
  USER: 'wp'
  PASSWORD: '123'
  ROOT_PASSWORD: '123'

---

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: maria-dep
  name: maria-dep

spec:
  replicas: 1
  selector:
    matchLabels:
      app: maria-dep

  template:
    metadata:
      labels:
        app: maria-dep
    spec:
      containers:
      - image: mariadb:10
        name: mariadb
        ports:
        - containerPort: 3306

        envFrom:
        - prefix: 'MARIADB_'
          configMapRef:
            name: maria-cm

---

apiVersion: v1
kind: Service
metadata:
  labels:
    app: maria-dep
  name: maria-svc

spec:
  ports:
  - port: 3306
    protocol: TCP
    targetPort: 3306
  selector:
    app: maria-dep

二,部署wordpress

配置文件wp-dep.yml

apiVersion: v1
kind: ConfigMap
metadata:
  name: wp-cm

data:
  HOST: 'maria-svc'
  USER: 'wp'
  PASSWORD: '123'
  NAME: 'db'

---

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: wp-dep
  name: wp-dep

spec:
  replicas: 2
  selector:
    matchLabels:
      app: wp-dep

  template:
    metadata:
      labels:
        app: wp-dep
    spec:
      containers:
      - image: wordpress:5
        name: wordpress
        ports:
        - containerPort: 80

        envFrom:
        - prefix: 'WORDPRESS_DB_'
          configMapRef:
            name: wp-cm
---


apiVersion: v1
kind: Service
metadata:
  labels:
    app: wp-dep
  name: wp-svc

spec:
  ports:
  - name: http80
    port: 80
    protocol: TCP
    targetPort: 80
    nodePort: 30088

  selector:
    app: wp-dep
  type: NodePort


运行上述配置文件,查看状态:

确保pod状态running

可以通过浏览器访问k8s集群中任意节点ip+30088端口访问,确认wordpress是否正常配置

三,部署 Nginx Ingress Controller

1,定义 Ingress Class

配置文件ingress-class.yaml

apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
  name: wp-ink

spec:
  controller: nginx.org/ingress-controller

2,定义Ingress

配置文件ingress-http.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: wp-ing

spec:
  ingressClassName: wp-ink

  rules:
  - host: wp.test
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: wp-svc
            port:
              number: 80

3,定义ingress controller

配置文件my-ingress-controller.yml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: wp-ing
  namespace: nginx-ingress
spec:
  replicas: 1
  selector:
    matchLabels:
      app: ngx-kic-dep
  template:
    metadata:
      labels:
        app: ngx-kic-dep
    spec:
      hostNetwork: true
      serviceAccountName: nginx-ingress
      automountServiceAccountToken: true
      containers:
      - image: nginx/nginx-ingress:2.2-alpine
        imagePullPolicy: IfNotPresent
        name: nginx-ingress
        ports:
        - name: http
          containerPort: 80
        - name: https
          containerPort: 443
        - name: readiness-port
          containerPort: 8081
        - name: prometheus
          containerPort: 9113
        readinessProbe:
          httpGet:
            path: /nginx-ready
            port: readiness-port
          periodSeconds: 30
        resources:
          requests:
            cpu: "100m"
            memory: "128Mi"
        securityContext:
          allowPrivilegeEscalation: true
          runAsUser: 101 #nginx
          runAsNonRoot: true
          capabilities:
            drop:
            - ALL
            add:
            - NET_BIND_SERVICE
        env:
        - name: POD_NAMESPACE
          valueFrom:
            fieldRef:
              fieldPath: metadata.namespace
        - name: POD_NAME
          valueFrom:
            fieldRef:
              fieldPath: metadata.name
        args:
          - -nginx-configmaps=$(POD_NAMESPACE)/nginx-config
          - -default-server-tls-secret=$(POD_NAMESPACE)/default-server-secret
          - -ingress-class=wp-ink

4,逐个运行配置文件,此时发现nginx-ingress容器无法启动

此时是因为nginx ingress controller未安装,需要安装

5,安装nginx ingress controller

安装步骤链接:

使用清单进行安装 |NGINX 入口控制器

(1)将其下载到本地
git clone https://github.com/nginxinc/kubernetes-ingress.git --branch v2.0.0

这里末尾的v2.0.0是nginx ingress controller的版本,具体需要参考你自己的k8s版本(版本不适配无法成功运行)

版本对应关系:Releases | NGINX Ingress Controller

查看k8s版本为1.21.0

(2)按步骤执行命令

下载到本地后可以看到目录,进入目录执行安装命令

a,设置基于角色的访问控制 (RBAC)

kubectl apply -f deployments/common/ns-and-sa.yaml

kubectl apply -f deployments/rbac/rbac.yaml

b,创建公共资源

kubectl apply -f deployments/common/nginx-config.yaml

kubectl apply -f deployments/common/ingress-class.yaml

c,创建自定义资源

kubectl apply -f https://raw.githubusercontent.com/nginxinc/kubernetes-ingress/v3.5.1/deploy/crds.yaml

d,部署 NGINX Ingress Controller

kubectl apply -f deployments/deployment/nginx-ingress.yaml

e,使用 DaemonSet

kubectl apply -f deployments/daemon-set/nginx-ingress.yaml

f,确认 NGINX Ingress Controller 正在运行

6,若wp-ing状态为Pending

此时查看pod describe,若为:

则需要在my-ingress-controller.yml配置文件中加上:

tolerations:
   - key: node-role.kubernetes.io/master
     operator: Exists
     effect: NoSchedule

重新运行配置文件后,pod状态为running

7,在本地host文件中加上wp.test的解析规则

注意这里的ip应该是nginx ingress controller pod所在的k8s节点ip,不是k8s-master的ip

四,即可通过浏览器访问wp.test看到页面:

  • 11
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值