代码之家  ›  专栏  ›  技术社区  ›  Huy Chau

如何配置Kubernetes Ingress nginx anotions白名单仅适用于HTTP

  •  1
  • Huy Chau  · 技术社区  · 7 年前

    我配置了我的入口支持SSL:

    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: "service"
      annotations:
        nginx.ingress.kubernetes.io/whitelist-source-range: "x.x.x.x/xx"
        nginx.ingress.kubernetes.io/ssl-redirect: "false"
    spec:
      tls:
      - hosts:
        - "example.com"
        secretName: example.name
      rules:
      - host: "example.com"
        http:
          paths:
          - path: /
            backend:
              serviceName: service
              servicePort: 80
    

    在上面的配置中,只有白名单中的IP可以访问http&https的域。但是我想配置所有IP地址可以访问 https://example.com (https)和白名单中的一些IP地址可以不使用SSL访问- http://example.com .

    3 回复  |  直到 7 年前
        1
  •  1
  •   Huy Chau    7 年前

    nginx.ingress.kubernetes.io/configuration-snippet

    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: "service"
      annotations:
        nginx.ingress.kubernetes.io/ssl-redirect: "false"
        # The configs to allow all IPs access via https and allow some IPs in
        # security whitelist access via http
        nginx.ingress.kubernetes.io/configuration-snippet: |
    
          if ($https) {
            set $allow_ip true;
          }
    
          if ($remote_addr ~ (x.x.x.x|y.y.y.y) {
            set $allow_ip true;
          }
    
          if ($allow_ip != true) {
            return 403;
          }
    spec:
      tls:
      - hosts:
        - "example.com"
        secretName: example.name
      rules:
      - host: "example.com"
        http:
          paths:
          - path: /
            backend:
              serviceName: service
              servicePort: 80
    
        2
  •  0
  •   helmbert    7 年前

    whitelist-source-range tls kubernetes.io/ingress.allow-http

    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: service-https
      annotations:
        nginx.ingress.kubernetes.io/ssl-redirect: "false"
        kubernetes.io/ingress.allow-http: "false"
    spec:
      tls:
      - hosts:
        - "example.com"
        secretName: example.name
      rules:
      - host: "example.com"
        http:
          paths:
          - path: /
            backend:
              serviceName: service
              servicePort: 80
    ---
    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: service-http
      annotations:
        nginx.ingress.kubernetes.io/whitelist-source-range: "x.x.x.x/xx"
    spec:
      rules:
      - host: "example.com"
        http:
          paths:
          - path: /
            backend:
              serviceName: service
              servicePort: 80