K 8 s Ingress Ngix使用


ここでは、どのようにイングレス・controllerを展開するかについては説明しませんが、イングレスのinxの使い方だけを実証します.主なプレゼンテーションは、手動で展開したnginxと同じように、ingres inxを使用することができるように、ingres inxの多様な構成を実現するために、ingres inxを使用する方法を示しています.ここでは以下のいくつかのケースを使って説明します.
  • ケース1(基本転送、https構成とannotationsベース使用)
  • ケース2(annotationsによるnginxの個別設定)
  • ケース3(annotationsによるrewrite基本構成)
  • ケース4(inx.ingress.kubergnetes.io/server-snippetの使い方を紹介する)
  • ケース5(configMapを使ってよりパーソナライズされた構成をする)
  • ケース1(最も簡単な基本構成):
    
     
       
       
       
       
    1. apiVersion: extensions/v1beta1
    2. kind: Ingress
    3. metadata:
    4. name: ingress
    5. namespace: test
    6. annotations:
    7. kubernetes.io/ingress.class: "nginx"
    8. nginx.ingress.kubernetes.io/use-regex: "true"
    9. spec:
    10. tls:
    11. - hosts:
    12. - nginx-a.gogen.cn
    13. secretName: gogen.cn
    14. rules:
    15. - host: nginx-a.gogen.cn
    16. http:
    17. paths:
    18. - path: /
    19. backend:
    20. serviceName: nginx-a
    21. servicePort: 80
    22. - path: /.*.(txt|css|doc)
    23. backend:
    24. serviceName: nginx-b
    25. servicePort: 80
    26. - path: /(api|app)/
    27. backend:
    28. serviceName: nginx-c
    29. servicePort: 80
    30. - path: /api
    31. backend:
    32. serviceName: nginx-d
    33. servicePort: 80

    ingress, test ( )。 , :nginx-a,nginx-b,nginx-c nginx-d, port 80( )。

    ingress tls , host secret。 secret, secret, :

    kubectl create secret tls gogen.cn --cert=1592339__gogen.cn.pem --key=1592339__gogen.cn.key -n test
     
       
       
       
       
    
     
       
       
       
       
    1. tls:
    2. - hosts: # , ,
    3. - nginx-a.gogen.cn # , , secret
    4. secretName: gogen.cn # secret

    annotations : server

    
     
       
       
       
       
    1. # ingress controller , ingress controller
    2. kubernetes.io/ingress. class: "nginx"
    3. # rules path , ,
    4. nginx.ingress.kubernetes.io/ use- regex: " true"

    rules : location

    
     
       
       
       
       
    1. rules:
    2. - host: nginx-a.gogen.cn # nginx server_name
    3. http:
    4. paths:
    5. - path: / # path location,path “/”。 ,
    6. backend:
    7. serviceName: nginx-a # service
    8. servicePort: 80 # service , service port
    9. - path: /.*.(txt|css|doc) # ( ), , ingress controller nginx , txt,css,doc url nginx-b service
    10. backend:
    11. serviceName: nginx-b
    12. servicePort: 80
    13. - path: /(api|app)/ # api app nginx-c service
    14. backend:
    15. serviceName: nginx-c
    16. servicePort: 80
    17. - path: /api # api url( , ) , nginx-d
    18. backend:
    19. serviceName: nginx-d
    20. servicePort: 80

    : path ingress controller nginx location , location nginx 。path nginx , path ,

    2( ):

    
     
       
       
       
       
    1. apiVersion: extensions/v1beta1
    2. kind: Ingress
    3. metadata:
    4. name: ingress
    5. namespace: test
    6. annotations:
    7. kubernetes.io/ingress. class: "nginx"
    8. nginx.ingress.kubernetes.io/ use-regex: "true"
    9. nginx.ingress.kubernetes.io/ proxy-connect-timeout: "600"
    10. nginx.ingress.kubernetes.io/ proxy-send-timeout: "600"
    11. nginx.ingress.kubernetes.io/ proxy-read-timeout: "600"
    12. nginx.ingress.kubernetes.io/ proxy-body-size: "10m"
    13. spec:
    14. tls:
    15. - hosts:
    16. - nginx-a.gogen.cn
    17. secretName: gogen.cn
    18. rules:
    19. - host: nginx-a.gogen.cn
    20. http:
    21. paths:
    22. - path: /
    23. backend:
    24. serviceName: nginx-a
    25. servicePort: 80
    26. - path: /.*.(txt|css|doc)
    27. backend:
    28. serviceName: nginx-b
    29. servicePort: 80
    30. - path: /(api|app)/
    31. backend:
    32. serviceName: nginx-c
    33. servicePort: 80
    34. - path: /api
    35. backend:
    36. serviceName: nginx-d
    37. servicePort: 80

    1 annotations

    
     
       
       
       
       
    1. kubernetes.io/ingress.class: "nginx"
    2. nginx.ingress.kubernetes.io/ use-regex: "true"
    3. # , 5s
    4. nginx.ingress.kubernetes.io/proxy- connect- timeout: "600"
    5. # , 60s
    6. nginx.ingress.kubernetes.io/proxy-send- timeout: "600"
    7. # , 60s
    8. nginx.ingress.kubernetes.io/proxy- read- timeout: "600"
    9. # , , 20m
    10. nginx.ingress.kubernetes.io/proxy- body- size: "10m"

    , , nginx-configuration annotations

    3(rewrite ):

    
     
       
       
       
       
    1. apiVersion: extensions/v1beta1
    2. kind: Ingress
    3. metadata:
    4. name: ingress-rewrite-tfs
    5. namespace: test
    6. annotations:
    7. kubernetes.io/ingress. class: "nginx"
    8. nginx.ingress.kubernetes.io/ rewrite-target: https: //gogen-test.oss-cn-hangzhou.aliyuncs.com
    9. spec:
    10. tls:
    11. - hosts:
    12. - nginx-a.gogen.cn
    13. secretName: gogen.cn
    14. rules:
    15. - host: nginx-a.gogen.cn
    16. http:
    17. paths:
    18. - path: /v1/tfs
    19. backend:
    20. serviceName: nginx-a
    21. servicePort: 80

    , “nginx.ingress.kubernetes.io/rewrite-target” 。 https://nginx-a.gogen.cn/v1/tfs/(.*), rewrite https://gogen-test.oss-cn-hangzhou.aliyuncs.com/$1, path, rewrite, path( location) manifests 。 , ,

    3(rewrite ):

    
     
       
       
       
       
    1. apiVersion: extensions/v1beta1
    2. kind: Ingress
    3. metadata:
    4. name: ingress
    5. namespace: test
    6. annotations:
    7. kubernetes.io/ingress.class: "nginx"
    8. nginx.ingress.kubernetes.io/use-regex: "true"
    9. nginx.ingress.kubernetes.io/server-snippet: |
    10. if ($uri ~* "/v1/tfs/.*") {
    11. rewrite ^/v1/tfs/(.*)$ https://gogen-test.oss-cn-hangzhou.aliyuncs.com/$1 permanent;
    12. }
    13. spec:
    14. tls:
    15. - hosts:
    16. - nginx-a.gogen.cn
    17. secretName: gogen.cn
    18. rules:
    19. - host: nginx-a.gogen.cn
    20. http:
    21. paths:
    22. - path: /
    23. backend:
    24. serviceName: nginx-a
    25. servicePort: 80
    26. - path: /.*.(txt|css|doc)
    27. backend:
    28. serviceName: nginx-b
    29. servicePort: 80
    30. - path: /(api|app)/
    31. backend:
    32. serviceName: nginx-c
    33. servicePort: 80
    34. - path: /api
    35. backend:
    36. serviceName: nginx-d
    37. servicePort: 80

    “nginx.ingress.kubernetes.io/server-snippet” , nginx , rewrite , , server

    5(configMap ):

    annotations nginx , configMap 。 configMap ,annotations configMap

    configMap , :

    
     
       
       
       
       
    1. apiVersion: v1
    2. kind: ConfigMap
    3. metadata:
    4. name: nginx-configuration
    5. namespace: kube-system
    6. data:
    7. use-http2: "false"
    8. ssl-protocols: "TLSv1 TLSv1.1 TLSv1.2"
    9. ssl-ciphers: "HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM"

     data 【 configMap 】,metadata name namespace , nginx-ingress-controller YAML

    
     
       
       
       
       
    1. containers:
    2. - args:
    3. - /nginx-ingress-controller
    4. - --configmap=$(POD_NAMESPACE)/nginx-configuration
    5. - --tcp-services-configmap=$(POD_NAMESPACE)/tcp-services
    6. - --udp-services-configmap=$(POD_NAMESPACE)/udp-services
    7. - --annotations-prefix=nginx.ingress.kubernetes.io
    8. - --publish-service=$(POD_NAMESPACE)/nginx-ingress-lb
    9. - --v=2

    ”- --configmap=$(POD_NAMESPACE)/nginx-configuration)“, configmap nginx-ingress-controller , ”/“

    apply , configMap apply , pods, edit nginx-ingress-controller controller, pods , pods , , :

    
     
       
       
       
       
    1. livenessProbe:
    2. failureThreshold: 3
    3. httpGet:
    4. path: /healthz
    5. port: 10254
    6. scheme: HTTP
    7. initialDelaySeconds: 10
    8. periodSeconds: 10
    9. successThreshold: 1
    10. timeoutSeconds: 1

    ”initialDelaySeconds“ 11 , pod ,

     

    https://blog.51cto.com/270142877/2338348