k8s部署ingress-nginx


ingress-nginx的部署方式有多種,本文介紹nodeport方式和hostnetwork方式:

一、nodeport方式

1、下載mandatory.yaml文件:https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/mandatory.yaml

然后修改文件中的鏡像:registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller:0.25.1

2、編輯service-nodeport.yaml(nodeport方式需要額外使用這個文件)

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
      targetPort: 80
      protocol: TCP
      nodePort: 32080  #http
    - name: https
      port: 443
      targetPort: 443
      protocol: TCP
      nodePort: 32443  #https
  selector:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
View Code

3、運行部署上面這兩個文件:

$ kubectl apply -f mandatory.yaml
$ kubectl apply -f node-port.yaml

4、部署后端程序

apiVersion: v1
kind: Service
metadata:
  name: myapp
  namespace: default
spec:
  selector:
    app: myapp
    release: canary
  ports:
  - name: http
    port: 80
    targetPort: 80
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-deploy
spec:
  replicas: 5
  selector:
    matchLabels:
      app: myapp
      release: canary
  template:
    metadata:
      labels:
        app: myapp
        release: canary
    spec:
      containers:
      - name: myapp
        image: ikubernetes/myapp:v2
        ports:
        - name: httpd
          containerPort: 80
View Code

5、配置后端程序的ingress:

$ vim ingress-myapp.yaml
apiVersion: extensions/v1beta1 kind: Ingress metadata: name: ingress-myapp namespace: default annotations: kubernetes.io/ingress.class: "nginx" spec: rules: - host: myapp.cabel.com http: paths: - path: backend: serviceName: myapp servicePort: 80

6、然后訪問:myapp.cabel.com:NodePort(32080)

7、增加后端服務:

$ vim deploy-tomcat.yaml
apiVersion: v1
kind: Service
metadata:
  name: tomcat
  namespace: default
spec:
  selector:
    app: tomcat
    release: canary
  ports:
  - name: http
    port: 8080
    targetPort: 8080
  - name: ajp
    port: 8009
    targetPort: 8009

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: tomcat-deploy
spec:
  replicas: 3
  selector:
    matchLabels:
      app: tomcat
      release: canary
  template:
    metadata:
      labels:
        app: tomcat
        release: canary
    spec:
      containers:
      - name: tomcat
        image: tomcat:7-alpine
        ports:
        - name: httpd
          containerPort: 8080
        - name: ajp
          containerPort: 8009
View Code
$ vim ingress-tomcat.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-tomcat
  namespace: default
  annotations:
    kubernets.io/ingress.class: "nginx"
spec:
  rules:
  - host: tomcat.cabel.com
    http:
      paths:
      - path:
        backend:
          serviceName: tomcat
          servicePort: 8080
View Code

8、然后訪問:tomcat.cabel.com:NodePort(32080)

二、deamonset方式,deamonset方式與上一種方式只有一處不同,只修改mandatory.yaml,而且,service-nodeport.yaml也不用配置,其他不用修改,訪問的時候,直接域名訪問,不用加nodeport。

 三、外部nginx引入流量到集群內部

比如域名為myapp.cabel.com,在配置了Deamonset模式的ingress-nginx后,外部的nginx配置如下

upstream app4core {
        server  192.168.10.55;
        server  192.168.10.56;
}

server {
        listen 80;
        server_name myapp.cabel.com;
        access_log /data/logs/nginx/app4core.dogotsn.access.log;
        error_log /data/logs/nginx/app4core.dogotsn.error.log;

        location / {

                        proxy_set_header X-Forwarded-For $remote_addr;
                        proxy_set_header X-Real-IP $remote_addr;
                        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                        proxy_set_header Host $host;
                        proxy_redirect off;
                        proxy_read_timeout 600;
                        proxy_connect_timeout 600;
                        proxy_pass http://app4core;
                }

        }

此種架構為雙層nginx代理,所以配置外層的nginx時,需要在請求報文的時候不去修改請求頭

參考文獻:https://www.jb51.net/article/122582.htm


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM