第一部分ingress设置的部分

部署ingress-controller

部署ingress-controller pod及相关资源

先给要部署nginx-ingress的node打上特定标签

[root@k8s-master ]# kubectl label nodes k8s-node1 custom/ingress-controller-ready=true
[root@k8s-master ]# kubectl label nodes k8s-node1 custom/ingress-controller-ready=true

官方文档中,部署只要简单的执行一个yaml

[root@k8s-master ingress-nginx]# wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.17.0/deploy/mandatory.yaml

修改后的文件如下

#TCP的部分加上mysql的3306的端口,NS是default,mysql的Service是dz-mysql
data:
  3306: "default/dz-mysql:3306"

[root@k8s-master ingress-nginx]# cat mandatory.yaml
---
apiVersion: v1
kind: Namespace
metadata:
  name: ingress-nginx
---
apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
  name: nginx-ingress-controller
  namespace: ingress-nginx
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
spec:
# 删除Replicas
# replicas: 1
  selector:
    matchLabels:
      app.kubernetes.io/name: ingress-nginx
      app.kubernetes.io/part-of: ingress-nginx
  template:
    metadata:
      labels:
        app.kubernetes.io/name: ingress-nginx
        app.kubernetes.io/part-of: ingress-nginx
      annotations:
        prometheus.io/port: "10254"
        prometheus.io/scrape: "true"
    spec:
      serviceAccountName: nginx-ingress-serviceaccount
      # 选择对应标签的node
      nodeSelector:
        isIngress: "true"
      # 使用hostNetwork暴露服务
      hostNetwork: true
      containers:
        - name: nginx-ingress-controller
          image: quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.25.0
          args:
            - /nginx-ingress-controller
            - --configmap=$(POD_NAMESPACE)/nginx-configuration
            - --tcp-services-configmap=$(POD_NAMESPACE)/tcp-services
            - --udp-services-configmap=$(POD_NAMESPACE)/udp-services
            - --publish-service=$(POD_NAMESPACE)/ingress-nginx
            - --annotations-prefix=nginx.ingress.kubernetes.io
          securityContext:
            allowPrivilegeEscalation: true
            capabilities:
              drop:
                - ALL
              add:
                - NET_BIND_SERVICE
            # www-data -> 33
            runAsUser: 33
          env:
            - name: POD_NAME
              valueFrom:
                fieldRef:
                  fieldPath: metadata.name
            - name: POD_NAMESPACE
              valueFrom:
                fieldRef:
                  fieldPath: metadata.namespace
          ports:
            - name: http
              containerPort: 80
            - name: https
              containerPort: 443
          livenessProbe:
            failureThreshold: 3
            httpGet:
              path: /healthz
              port: 10254
              scheme: HTTP
            initialDelaySeconds: 10
            periodSeconds: 10
            successThreshold: 1
            timeoutSeconds: 10
          readinessProbe:
            failureThreshold: 3
            httpGet:
              path: /healthz
              port: 10254
              scheme: HTTP
            periodSeconds: 10
            successThreshold: 1
            timeoutSeconds: 10
---
apiVersion: v1
kind: Service
metadata:
  name: default-http-backend
  namespace: ingress-nginx
  labels:
    app: default-http-backend
spec:
  ports:
  - port: 80
    targetPort: 8080
  selector:
    app: default-http-backend
---
kind: ConfigMap
apiVersion: v1
metadata:
  name: nginx-configuration
  namespace: ingress-nginx
  labels:
    app: ingress-nginx
---
kind: ConfigMap
apiVersion: v1
metadata:
  name: tcp-services
  namespace: ingress-nginx
###----------添加这部分,ingress默认是支持tcp的
data:
  3306: "default/dz-mysql:3306"
###--------------------------
---
kind: ConfigMap
apiVersion: v1
metadata:
  name: udp-services
  namespace: ingress-nginx
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: nginx-ingress-serviceaccount
  namespace: ingress-nginx
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
  name: nginx-ingress-clusterrole
rules:
  - apiGroups:
      - ""
    resources:
      - configmaps
      - endpoints
      - nodes
      - pods
      - secrets
    verbs:
      - list
      - watch
  - apiGroups:
      - ""
    resources:
      - nodes
    verbs:
      - get
  - apiGroups:
      - ""
    resources:
      - services
    verbs:
      - get
      - list
      - watch
  - apiGroups:
      - "extensions"
    resources:
      - ingresses
    verbs:
      - get
      - list
      - watch
  - apiGroups:
      - ""
    resources:
        - events
    verbs:
        - create
        - patch
  - apiGroups:
      - "extensions"
    resources:
      - ingresses/status
    verbs:
      - update
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: Role
metadata:
  name: nginx-ingress-role
  namespace: ingress-nginx
rules:
  - apiGroups:
      - ""
    resources:
      - configmaps
      - pods
      - secrets
      - namespaces
    verbs:
      - get
  - apiGroups:
      - ""
    resources:
      - configmaps
    resourceNames:
      # Defaults to "<election-id>-<ingress-class>"
      # Here: "<ingress-controller-leader>-<nginx>"
      # This has to be adapted if you change either parameter
      # when launching the nginx-ingress-controller.
      - "ingress-controller-leader-nginx"
    verbs:
      - get
      - update
  - apiGroups:
      - ""
    resources:
      - configmaps
    verbs:
      - create
  - apiGroups:
      - ""
    resources:
      - endpoints
    verbs:
      - get
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: RoleBinding
metadata:
  name: nginx-ingress-role-nisa-binding
  namespace: ingress-nginx
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: nginx-ingress-role
subjects:
  - kind: ServiceAccount
    name: nginx-ingress-serviceaccount
    namespace: ingress-nginx
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: nginx-ingress-clusterrole-nisa-binding
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: nginx-ingress-clusterrole
subjects:
  - kind: ServiceAccount
    name: nginx-ingress-serviceaccount
    namespace: ingress-nginx
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: nginx-ingress-controller
  namespace: ingress-nginx 
spec:
  replicas: 1
  selector:
    matchLabels:
      app: ingress-nginx
  template:
    metadata:
      labels:
        app: ingress-nginx
      annotations:
        prometheus.io/port: '10254'
        prometheus.io/scrape: 'true'
    spec:
      serviceAccountName: nginx-ingress-serviceaccount
      containers:
        - name: nginx-ingress-controller
          image: quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.17.0
          args:
            - /nginx-ingress-controller
            - --default-backend-service=$(POD_NAMESPACE)/default-http-backend
            - --configmap=$(POD_NAMESPACE)/nginx-configuration
            - --tcp-services-configmap=$(POD_NAMESPACE)/tcp-services
            - --udp-services-configmap=$(POD_NAMESPACE)/udp-services
            - --publish-service=$(POD_NAMESPACE)/ingress-nginx
            - --annotations-prefix=nginx.ingress.kubernetes.io
          securityContext:
            capabilities:
                drop:
                - ALL
                add:
                - NET_BIND_SERVICE
            # www-data -> 33
            runAsUser: 33
          env:
            - name: POD_NAME
              valueFrom:
                fieldRef:
                  fieldPath: metadata.name
            - name: POD_NAMESPACE
              valueFrom:
                fieldRef:
                  fieldPath: metadata.namespace
          ports:
          - name: http
            containerPort: 80
          - name: https
            containerPort: 443
          livenessProbe:
            failureThreshold: 3
            httpGet:
              path: /healthz
              port: 10254
              scheme: HTTP
            initialDelaySeconds: 10
            periodSeconds: 10
            successThreshold: 1
            timeoutSeconds: 1
          readinessProbe:
            failureThreshold: 3
            httpGet:
              path: /healthz
              port: 10254
              scheme: HTTP
            periodSeconds: 10
            successThreshold: 1
            timeoutSeconds: 1

第二部分lnmp+discuz程序的部分

资源获取和环境配置参考 Kubernetes集群部署discuz

具体yaml文件如下

mysql的部分

[root@k8s-master mysql]# cat mysql-pv.yaml 
apiVersion: v1
kind: PersistentVolume
metadata:
  name: mysql-pv
spec:
  capacity:
    storage: 50Gi
  accessModes:
    - ReadWriteMany
  nfs:
    path: /data/k8s/discuz/db
    ##这里的IP,是NFS server的IP
    server: 10.88.0.1

[root@k8s-master mysql]# cat mysql-pvc.yaml 
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-claim
  labels:
    app: discuz
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 50Gi

      [root@k8s-master mysql]# cat mysql-dp.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: dz-mysql
  labels:
    app: discuz
spec:
  selector:
    matchLabels:
      app: discuz
      tier: mysql
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: discuz
        tier: mysql
    spec:
      containers:
      - image: mysql:5.7
        name: mysql
        env:
        - name: MYSQL_ROOT_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mysql-pass
              key: password
        ports:
        - containerPort: 3306
          name: dz-mysql
        volumeMounts:
        - name: mysql-persistent-storage
          mountPath: /data
      volumes:
      - name: mysql-persistent-storage
        persistentVolumeClaim:
          claimName: mysql-claim

nginx_php的部分

[root@k8s-master nginx_php]# cat web-pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: web-pv
spec:
  capacity:
    storage: 50Gi
  accessModes:
    - ReadWriteMany
  nfs:
    path: /data/k8s/discuz/web
    server: 10.88.0.1
#-------------------------------------------------
[root@k8s-master nginx_php]# cat web-pvc.yaml 
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: web-claim
  labels:
    app: discuz
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 20Gi
#-------------------------------------------------
[root@k8s-master nginx_php]# cat web-dp.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: dz-web
  labels:
    app: discuz
spec:
  replicas: 1
  selector:
    matchLabels:
      app: discuz
      tier: nginx-php
  template:
    metadata:
      labels:
        app: discuz
        tier: nginx-php
    spec:
      containers:
      - image: nginx-php:v1
        name: dz-web
        ports:
        - containerPort: 9000
        - containerPort: 80
          name: dz-web
        volumeMounts:
        - name: mysql-persistent-storage
          mountPath: /var/www/html/
      volumes:
      - name: mysql-persistent-storage
        persistentVolumeClaim:
          claimName: web-claim
#-------------------------------------------------
[root@k8s-master nginx_php]# cat web-svc.yaml 
apiVersion: v1
kind: Service
metadata:
  name: dz-web
  labels:
    app: discuz
spec:
  type: NodePort
  ports:
    - port: 80
      nodePort: 30001
  selector:
    app: discuz
    tier: nginx-php
#-------------------------------------------------
[root@k8s-master nginx_php]# cat web-ingree.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: dz-web
  annotations:
    kubernetes.io/ingress.class: "nginx"
spec:
  rules:
  - host: dz.ethnicity.cn
    http:
      paths:
      - path: /
        backend:
          serviceName: dz-web
          servicePort: 80
#-------------------------------------------------
[root@k8s-master nginx_php]# cat install.sh 
#!/bin/bash
kubectl delete -f web-svc.yaml
kubectl delete -f web-dp.yaml
kubectl delete -f web-pvc.yaml
kubectl delete -f web-pv.yaml
kubectl delete -f web-ingree.yaml
#exit;
kubectl apply -f web-pv.yaml
kubectl apply -f web-pvc.yaml
kubectl apply -f web-dp.yaml
kubectl apply -f web-svc.yaml
kubectl apply -f web-ingree.yaml
#查看下具体的配置资源信息
[root@k8s-master nginx_php]# kubectl  get all -o wide
NAME                           READY   STATUS    RESTARTS   AGE    IP           NODE        NOMINATED NODE   READINESS GATES
pod/dz-mysql-c75dd6665-97ndp   1/1     Running   0          98m    10.2.28.40   10.88.0.2   <none>           <none>
pod/dz-web-56ff6757c7-k6jr8    1/1     Running   0          112m   10.2.97.25   10.88.0.3   <none>           <none>
NAME                 TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE     SELECTOR
service/dz-mysql     NodePort    10.1.123.113   <none>        3306:27812/TCP   98m     app=discuz,tier=mysql
service/dz-web       NodePort    10.1.185.76    <none>        80:30001/TCP     112m    app=discuz,tier=nginx-php
service/kubernetes   ClusterIP   10.1.0.1       <none>        443/TCP          3d20h   <none>
NAME                       READY   UP-TO-DATE   AVAILABLE   AGE    CONTAINERS   IMAGES         SELECTOR
deployment.apps/dz-mysql   1/1     1            1           98m    mysql        mysql:5.7      app=discuz,tier=mysql
deployment.apps/dz-web     1/1     1            1           112m   dz-web       nginx-php:v1   app=discuz,tier=nginx-php
NAME                                 DESIRED   CURRENT   READY   AGE    CONTAINERS   IMAGES         SELECTOR
replicaset.apps/dz-mysql-c75dd6665   1         1         1       98m    mysql        mysql:5.7      app=discuz,pod-template-hash=c75dd6665,tier=mysql
replicaset.apps/dz-web-56ff6757c7    1         1         1       112m   dz-web       nginx-php:v1   app=discuz,pod-template-hash=56ff6757c7,tier=nginx-php
#查看下具体的配置资源信息
[root@k8s-master nginx_php]# kubectl  get all -o wide -n ingress-nginx
NAME                                            READY   STATUS    RESTARTS   AGE   IP           NODE        NOMINATED NODE   READINESS GATES
pod/nginx-ingress-controller-5784c99d57-nvjw5   1/1     Running   0          48m   10.2.28.43   10.88.0.2   <none>           <none>
pod/nginx-ingress-controller-tfbq7              1/1     Running   0          48m   10.88.0.2    10.88.0.2   <none>           <none>
pod/nginx-ingress-controller-tj574              1/1     Running   0          48m   10.88.0.3    10.88.0.3   <none>           <none>
NAME                           TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE   SELECTOR
service/default-http-backend   ClusterIP   10.1.2.61    <none>        80/TCP    48m   app=default-http-backend
NAME                                      DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR    AGE   CONTAINERS                 IMAGES                                                                  SELECTOR
daemonset.apps/nginx-ingress-controller   2         2         2       2            2           isIngress=true   48m   nginx-ingress-controller   quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.25.0   app.kubernetes.io/name=ingress-nginx,app.kubernetes.io/part-of=ingress-nginx
NAME                                       READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS                 IMAGES                                                                  SELECTOR
deployment.apps/nginx-ingress-controller   1/1     1            1           48m   nginx-ingress-controller   quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.17.0   app=ingress-nginx
NAME                                                  DESIRED   CURRENT   READY   AGE   CONTAINERS                 IMAGES                                                                  SELECTOR
replicaset.apps/nginx-ingress-controller-5784c99d57   1         1         1       48m   nginx-ingress-controller   quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.17.0   app=ingress-nginx,pod-template-hash=5784c99d57
#查看下具体的配置资源信息
[root@k8s-master nginx_php]# kubectl  get ingress
NAME           HOSTS                ADDRESS   PORTS   AGE
dz-mysql       mysql.ethnicity.cn             80      5h21m
dz-web         dz.ethnicity.cn                80      114m
ingress-test   test.ethnicity.cn              80      20h
[root@k8s-master nginx_php]# docker images
REPOSITORY                                                                     TAG                 IMAGE ID            CREATED             SIZE
nginx-php                                                                      latest              8e770279f2eb        2 days ago          330MB
nginx-php                                                                      v1                  8e770279f2eb        2 days ago          330MB
mysql                                                                          5.7                 f965319e89de        10 days ago         448MB
nginx                                                                          latest              602e111c06b6        2 weeks ago         127MB
richarvey/nginx-php-fpm                                                        latest              0a7e4511aff1        2 weeks ago         330MB
registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller   0.25.1              0439eb3e11f1        8 months ago        511MB
quay.io/kubernetes-ingress-controller/nginx-ingress-controller                 0.25.0              02149b6f439f        10 months ago       508MB
registry.cn-qingdao.aliyuncs.com/kubernetes_xingej/defaultbackend-amd64        1.5                 d8f37b8cdaf4        18 months ago       5.13MB
registry.cn-qingdao.aliyuncs.com/kubernetes_xingej/nginx-ingress-controller    0.20.0              3cc332ecde4f        18 months ago       513MB


[root@k8s-node1 ~]# docker images
REPOSITORY                                                                     TAG                 IMAGE ID            CREATED             SIZE
nginx-php                                                                      latest              9db8346ea35b        2 days ago          330MB
nginx-php                                                                      v1                  9db8346ea35b        2 days ago          330MB
quay.io/kubernetes-ingress-controller/nginx-ingress-controller                 0.32.0              70144d369cb2        6 days ago          327MB
mysql                                                                          5.7                 f965319e89de        10 days ago         448MB
nginx                                                                          latest              602e111c06b6        2 weeks ago         127MB
richarvey/nginx-php-fpm                                                        latest              0a7e4511aff1        2 weeks ago         330MB
jettech/kube-webhook-certgen                                                   v1.2.0              b7f5a2787829        6 months ago        49MB
registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller   0.25.1              0439eb3e11f1        8 months ago        511MB
quay.io/kubernetes-ingress-controller/nginx-ingress-controller                 0.25.0              02149b6f439f        10 months ago       508MB
registry.cn-qingdao.aliyuncs.com/kubernetes_xingej/defaultbackend-amd64        1.5                 d8f37b8cdaf4        18 months ago       5.13MB
registry.cn-qingdao.aliyuncs.com/kubernetes_xingej/nginx-ingress-controller    0.20.0              3cc332ecde4f        18 months ago       513MB
quay.io/kubernetes-ingress-controller/nginx-ingress-controller                 0.17.0              2952cea7d7f1        22 months ago       360MB
mirrorgooglecontainers/pause-amd64                                             3.0                 99e59f495ffa        4 years ago         747kB

[root@k8s-node2 ~]# docker images
REPOSITORY                                                                     TAG                 IMAGE ID            CREATED             SIZE
nginx-php                                                                      latest              9cd4f570df23        2 days ago          330MB
nginx-php                                                                      v1                  9cd4f570df23        2 days ago          330MB
mysql                                                                          5.7                 f965319e89de        10 days ago         448MB
nginx                                                                          latest              602e111c06b6        2 weeks ago         127MB
richarvey/nginx-php-fpm                                                        latest              0a7e4511aff1        2 weeks ago         330MB
jettech/kube-webhook-certgen                                                   v1.2.0              b7f5a2787829        6 months ago        49MB
registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller   0.25.1              0439eb3e11f1        8 months ago        511MB
quay.io/kubernetes-ingress-controller/nginx-ingress-controller                 0.25.0              02149b6f439f        10 months ago       508MB
registry.cn-qingdao.aliyuncs.com/kubernetes_xingej/defaultbackend-amd64        1.5                 d8f37b8cdaf4        18 months ago       5.13MB
registry.cn-qingdao.aliyuncs.com/kubernetes_xingej/nginx-ingress-controller    0.20.0              3cc332ecde4f        18 months ago       513MB
mirrorgooglecontainers/pause-amd64                                             3.0                 99e59f495ffa        4 years ago         747kB

购买阿里云的SLB服务(设定如下的hosts信息)

SLB的后端服务器是node节点+80端口

47.114.93.219 mysql.ethnicity.cn

Navicat就可以连接mysql.ethnicity.cn

aaea4f921b11dca2e70dc87be2c40083.png

 

d3dd6a9a02b47769d9c0e35ab62828fe.png

 

 

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐