ingress

image.png

部署ingress-controller

https://blog.csdn.net/networken/article/details/85881558
https://www.cnblogs.com/dingbin/p/9754993.html

下载nginx-ingress-controller配置文件

wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.21.0/deploy/mandatory.yaml

修改镜像地址

image: willdockerhub/nginx-ingress-controller:0.21.0

image: 10.0.0.11:5000/wuxingge/nginx-ingress-controller:0.21.0

[root@k8s-master1 ingree-nginx]# vim nginx-ingress.yaml

apiVersion: v1
kind: Namespace
metadata:
  name: ingress-nginx

---
kind: ConfigMap
apiVersion: v1
metadata:
  name: nginx-configuration
  namespace: ingress-nginx
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx

---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: nginx-ingress-serviceaccount
  namespace: ingress-nginx
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx

---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
  name: nginx-ingress-clusterrole
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
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
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: 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
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: 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
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
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
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
spec:
  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
      containers:
        - name: nginx-ingress-controller
          image: 192.168.0.141:5000/wuxingge/nginx-ingress-controller:0.21.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:
            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

---

执行yaml文件部署

kubectl create -f nginx-ingress.yaml
[root@k8s-master1 ingree-nginx]# kubectl get pods -o wide -n ingress-nginx
NAME                                       READY   STATUS    RESTARTS   AGE   IP            NODE        NOMINATED NODE   READINESS GATES
nginx-ingress-controller-c9b47ff67-7pwqh   1/1     Running   0          89s   10.254.40.4   10.0.0.12   <none>           <none>

nodeport方式对外提供服务

通过ingress-controller对外提供服务,现在还需要手动给ingress-controller建立一个servcie,接收集群外部流量。

service-nodeport配置文件

wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/provider/baremetal/service-nodeport.yaml

vim service-nodeport.yaml

apiVersion: v1
kind: Service
metadata:
  name: ingress-nginx
  namespace: ingress-nginx
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
spec:
  type: NodePort
  ports:
    - name: http
      port: 80
      protocol: TCP
      nodePort: 30080
    - name: https
      port: 443
      protocol: TCP
      nodePort: 30443
  selector:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx

执行

kubectl create -f service-nodeport.yaml  

查看

[root@k8s-master1 ingree-nginx]# kubectl get service -n ingress-nginx 
NAME            TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE
ingress-nginx   NodePort   10.254.150.28   <none>        80:30080/TCP,443:30443/TCP   8s

&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

使用Ingress发布tomcat

准备名称空间

vi testing-namespace.yaml

kind: Namespace
apiVersion: v1
metadata:
  name: testing
  labels:
    env: testing
[root@k8s-master1 ingree-nginx]# kubectl create -f testing-namespace.yaml 
namespace/testing created
[root@k8s-master1 ingree-nginx]# kubectl get namespaces testing 
NAME      STATUS   AGE
testing   Active   21s

部署tomcat实例

vi tomcat-deploy.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: tomcat-deploy
  namespace: testing
spec:
  replicas: 2
  selector:
    matchLabels:
      app: tomcat
  template:
    metadata:
      labels:
        app: tomcat
    spec:
      containers:
      - name: tomcat
        image: tomcat:8.0.50-jre8-alpine
        ports:
        - containerPort: 8080
          name: httpport
        - containerPort: 8009
          name: ajpport
kubectl create -f  tomcat-deploy.yaml
[root@k8s-master1 ingree-nginx]# kubectl get pods -n testing -o wide
NAME                             READY   STATUS    RESTARTS   AGE     IP             NODE        NOMINATED NODE   READINESS GATES
tomcat-deploy-5c55c48479-mxfgv   1/1     Running   0          6m55s   10.254.88.5    10.0.0.12   <none>           <none>
tomcat-deploy-5c55c48479-wswjl   1/1     Running   0          7m40s   10.254.102.2   10.0.0.13   <none>           <none>

创建Service资源

vi tomcat-svc.yaml

apiVersion: v1
kind: Service
metadata:
  name: tomcat-svc
  namespace: testing
  labels:
    app: tomcat-svc
spec:
  selector:
    app: tomcat
  ports:
  - name: http
    port: 80
    targetPort: 8080
    protocol: TCP
[root@k8s-master1 ingree-nginx]# kubectl create -f  tomcat-svc.yaml
service/tomcat-svc created
[root@k8s-master1 ingree-nginx]# kubectl get service -n testing -o wide
NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)   AGE   SELECTOR
tomcat-svc   ClusterIP   10.254.198.130   <none>        80/TCP    25s   app=tomcat

创建Ingress资源

vi tomcat-ingress.yaml

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: tomcat
  namespace: testing
  annotations:
    kubernetes.io/ingress.class: "nginx"
spec:
  rules:
  - host: tomcat.wuxingge.com
    http:
      paths:
      - path:
        backend:
          serviceName: tomcat-svc
          servicePort: 80
kubectl create -f  tomcat-ingress.yaml
[root@k8s-master1 ingree-nginx]# kubectl describe ingresses.extensions -n testing 
Name:             tomcat
Namespace:        testing
Address:          
Default backend:  default-http-backend:80 (<none>)
Rules:
  Host                 Path  Backends
  ----                 ----  --------
  tomcat.wuxingge.com  
                          tomcat-svc:80 (<none>)
Annotations:
  kubernetes.io/ingress.class:  nginx
Events:
  Type    Reason  Age   From                      Message
  ----    ------  ----  ----                      -------
  Normal  CREATE  44s   nginx-ingress-controller  Ingress testing/tomcat
[root@k8s-master1 ingree-nginx]# kubectl get ingresses.extensions -n testing 
NAME     HOSTS                 ADDRESS   PORTS   AGE
tomcat   tomcat.wuxingge.com             80      76s

查看ingress-default-backend的详细信息

kubectl exec -n ingress-nginx -ti nginx-ingress-controller-c9b47ff67-7pwqh -- /bin/sh
$
$ cat nginx.conf

hosts解析

[root@k8s-master1 ingree-nginx]# kubectl get pods -o wide -n ingress-nginx 
NAME                                       READY   STATUS    RESTARTS   AGE   IP            NODE        NOMINATED NODE   READINESS GATES
nginx-ingress-controller-c9b47ff67-vq9cc   1/1     Running   0          85m   10.254.88.3  ** 10.0.0.12**   <none>           <none>
[root@k8s-master1 ingree-nginx]# kubectl get service -o wide -n ingress-nginx 
NAME            TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE   SELECTOR
ingress-nginx   NodePort   10.254.150.28   <none>        80:30080/TCP,443:30443/TCP   77m   app.kubernetes.io/name=ingress-nginx,app.kubernetes.io/part-of=ingress-nginx

10.0.0.12 tomcat.wuxingge.com

访问

http://tomcat.wuxingge.com:30080/

&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

wordpress ingress

部署MySQL

创建Secret对象

kubectl create secret generic mysql-pass --from-literal=password=Wxg@123.com
kubectl get secrets

pv

[root@k8s-master1 wordpress]# vim mysql_nfs_pv.yaml 
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv1-nfs
  labels:
    app: pv1-nfs
spec:
  capacity:
    storage: 20Gi
  accessModes:
  - ReadWriteMany
  persistentVolumeReclaimPolicy: Recycle
  nfs:
    server: 10.0.0.11
    path: /data/db

pvc

[root@k8s-master1 wordpress]# vim mysql_nfs_pvc.yaml 
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pv-claim
  labels:
    app: wordpress
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 20Gi

deployment_service

[root@k8s-master1 wordpress]# vim mysql-deployment.yaml 
apiVersion: v1
kind: Service
metadata:
  name: wordpress-mysql
  labels:
    app: wordpress
spec:
  ports:
    - port: 3306
  selector:
    app: wordpress
    tier: mysql
  clusterIP: None
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: wordpress-mysql
  labels:
    app: wordpress
spec:
  replicas: 1
  selector:
    matchLabels:
      app: wordpress
      tier: mysql
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: wordpress
        tier: mysql
    spec:
      containers:
      - name: mysql
        image: mysql:5.7
        env:
        - name: MYSQL_ROOT_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mysql-pass
              key: password
        ports:
        - name: mysql
          containerPort: 3306
        volumeMounts:
        - name: mysql-persistent-storage
          mountPath: /var/lib/mysql
      volumes:
      - name: mysql-persistent-storage
        persistentVolumeClaim:
          claimName: mysql-pv-claim

官方MySQL镜像

/etc/mysql/mysql.conf.d/mysqld.cnf

部署wordpress

pv

vi wordpress_nfs_pv.yaml

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv2-nfs
  labels:
    app: pv2-nfs
spec:
  capacity:
    storage: 20Gi
  accessModes:
  - ReadWriteMany
  persistentVolumeReclaimPolicy: Recycle
  nfs:
    server: 10.0.0.11
    path: /data/web

pvc

vi wordpress_nfs_pvc.yaml

---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: wp-pv-claim
  labels:
    app: wordpress
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 20Gi

deployment-service

vi wordpress-deployment.yaml

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: wordpress
  labels:
    app: wordpress
spec:
  replicas: 2
  selector:
    matchLabels:
      app: wordpress
      tier: frontend
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: wordpress
        tier: frontend
    spec:
      containers:
      - name: wordpress
        image: wordpress:4.8-apache
        env:
        - name: WORDPRESS_DB_HOST
          value: wordpress-mysql
        - name: WORDPRESS_DB_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mysql-pass
              key: password
        ports:
        - name: wordpress
          containerPort: 80
        volumeMounts:
        - name: wordpress-persistent-storage
          mountPath: /var/www/html
      volumes:
      - name: wordpress-persistent-storage
        persistentVolumeClaim:
          claimName: wp-pv-claim
---
apiVersion: v1
kind: Service
metadata:
  name: wordpress
  labels:
    app: wordpress
spec:
  ports:
    - name: wordpress
      port: 80
      targetPort: 80
      protocol: TCP
  selector:
    app: wordpress
    tier: frontend

ingress

vi wordpress-ingress.yaml

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: wordpress
  annotations:
    kubernetes.io/ingress.class: "nginx"
spec:
  rules:
  - host: wordpress.wuxingge.com
    http:
      paths:
      - path:
        backend:
          serviceName: wordpress
          servicePort: 80

hosts解析

[root@k8s-master1 ingree-nginx]# kubectl get pods -o wide -n ingress-nginx 
NAME                                       READY   STATUS    RESTARTS   AGE   IP            NODE        NOMINATED NODE   READINESS GATES
nginx-ingress-controller-c9b47ff67-vq9cc   1/1     Running   0          85m   10.254.88.3   **10.0.0.12**   <none>           <none>
[root@k8s-master1 ingree-nginx]# kubectl get service -o wide -n ingress-nginx 
NAME            TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE   SELECTOR
ingress-nginx   NodePort   10.254.150.28   <none>        80:30080/TCP,443:30443/TCP   77m   app.kubernetes.io/name=ingress-nginx,app.kubernetes.io/part-of=ingress-nginx

10.0.0.12 wordpress.wuxingge.com

访问

http://wordpress.wuxingge.com:30080/

ingress-nginx配置https转发dashboard

生成ingress-secret证书

root@k8s-master1 ingree-nginx]# kubectl -n kube-system  create secret tls ingress-secret --key /certs/dashboard.key --cert /certs/dashboard.crt
secret/ingress-secret created

创建ingress服务

vi k8s.yaml

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: dashboard-ingress
  namespace: kube-system
  annotations:
    nginx.ingress.kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/secure-backends: "true"
    nginx.ingress.kubernetes.io/ssl-passthrough: "true"
spec:
  tls:
  - hosts:
    - dashboard.wuxingge.com
    secretName: ingress-secret
  rules:
    - host: dashboard.wuxingge.com
      http:
        paths:
        - path: /
          backend:
            serviceName: kubernetes-dashboard
            servicePort: 443
kubectl create -f k8s.yaml       
[root@k8s-master1 yaml]# kubectl get ingresses.extensions -n kube-system 
NAME                HOSTS                    ADDRESS   PORTS     AGE
dashboard-ingress   dashboard.wuxingge.com             80, 443   35s
[root@k8s-master1 yaml]# kubectl describe ingresses.extensions -n kube-system dashboard-ingress 
Name:             dashboard-ingress
Namespace:        kube-system
Address:          
Default backend:  default-http-backend:80 (<none>)
TLS:
  ingress-secret terminates dashboard.wuxingge.com
Rules:
  Host                    Path  Backends
  ----                    ----  --------
  dashboard.wuxingge.com  
                          /   kubernetes-dashboard:443 (10.254.88.4:8443)
Annotations:
  nginx.ingress.kubernetes.io/ssl-passthrough:  true
  nginx.ingress.kubernetes.io/ingress.class:    nginx
  nginx.ingress.kubernetes.io/secure-backends:  true
Events:
  Type    Reason  Age    From                      Message
  ----    ------  ----   ----                      -------
  Normal  CREATE  3m32s  nginx-ingress-controller  Ingress kube-system/dashboard-ingress      

hosts解析

[root@k8s-master1 yaml]# kubectl get service -n ingress-nginx 
NAME            TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE
ingress-nginx   NodePort   10.254.150.28   <none>        80:30080/TCP,443:**30443**/TCP   14h
[root@k8s-master1 yaml]# kubectl get pods -n ingress-nginx -o wide
NAME                                       READY   STATUS    RESTARTS   AGE   IP            NODE        NOMINATED NODE   READINESS GATES
nginx-ingress-controller-c9b47ff67-vq9cc   1/1     Running   1          14h   10.254.88.3   **10.0.0.12**   <none>           <none>

10.0.0.12 dashboard.wuxingge.com

访问

https://dashboard.wuxingge.com:30443

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Ingress 502错误是指在访问Ingress时服务器返回的错误代码。具体表示服务器出现了一些问题,无法提供所请求的页面。 当我们在浏览器访问一个网站时,我们的请求首先会发送到服务器,服务器会进行处理并返回响应给我们的浏览器。在这个过程中,如果服务器在处理我们的请求时遇到了错误,就会返回相应的错误代码。而Ingress 502错误代码则意味着服务器在处理我们的请求时遇到了问题。 Ingress 502错误可能是由于以下几个原因引起的: 1. 服务器过载:服务器处理请求的速度没有跟上请求的速度,导致一些请求无法正常处理,从而返回502错误。 2. 后端服务器故障:服务器上的后端应用程序或数据库等出现了故障,导致服务器无法处理请求。 3. 代理服务器问题:在使用代理服务器时,代理服务器本身出现了问题,无法正常将请求转发到目标服务器。 对于用户而言,遇到Ingress 502错误时,我们建议可以尝试以下几个解决方法: 1. 刷新页面:有时候502错误是暂时的,刷新页面可能会解决问题。 2. 等待一段时间:如果是服务器过载导致的错误,可以等待一段时间后再次尝试访问。 3. 检查网络连接:检查自己的网络连接是否正常,尝试连接其他网站,以确定是否是自己的网络问题。 4. 与网站管理员联系:如果以上方法都无效,可以尝试联系网站管理员报告问题,让其能够及时处理服务器问题。 总的来说,Ingress 502错误代码表示服务器无法正常处理请求,可能是由于服务器过载或故障等原因引起的。需要用户尝试刷新页面、等待一段时间、检查网络连接或与网站管理员联系来解决问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wuxingge

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值