【问题标题】:Kubernetes Ingress network deny some pathsKubernetes Ingress 网络拒绝某些路径
【发布时间】:2019-01-23 06:19:33
【问题描述】:

我有一个简单的 kubernetes 入口网络。

我需要拒绝访问某些关键路径,例如 /admin 等。

我的入口网络文件如下所示。

 apiVersion: extensions/v1beta1
 kind: Ingress
 metadata:
 name: ingress-test
 spec:
   rules:
   - host: host.host.com
   http:
      paths:
        - path: /service-mapping
      backend:
         serviceName: /service-mapping
         servicePort: 9042

如何使用 Kubernetes 入口网络、nginx annonations 或其他方法拒绝自定义路径。


我使用如下所示的注释来处理这个问题。

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
   name: nginx-configuration-snippet
   annotations:
      nginx.ingress.kubernetes.io/configuration-snippet: |

     server_tokens off;
     location DANGER-PATH {
    deny all;
    return 403;
  }

spec:
  rules:
   - host: api.myhost.com
   http:
  paths:
  - backend:
      serviceName: bookapi-2
      servicePort: 8080
    path: PATH 

【问题讨论】:

    标签: nginx kubernetes kubernetes-ingress


    【解决方案1】:

    复制官方的 Kubernetes 方法并使用始终返回 404 的 defaultbackend 容器。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: defaultbackend
    spec:
      selector:
        matchLabels:
          app: defaultbackend
      template:
        metadata:
          labels:
            app: defaultbackend
        spec:
          containers:
          - name: defaultbackend
            image: k8s.gcr.io/defaultbackend-amd64:1.5
            resources:
              requests:
                memory: 10M
                cpu: 5m
              limits:
                memory: 10M
            ports:
            - containerPort: 8080
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: defaultbackend
    spec:
      selector:
        app: defaultbackend
      ports:
      - port: 80
        targetPort: 8080
    

    然后在你的入口中,添加一个paths 条目:

          paths:
          - path: /
            backend:
              serviceName: my-real-service
              servicePort: 3000
          - path: /admin
            backend:
              serviceName: defaultbackend
              servicePort: 80
    

    【讨论】:

      【解决方案2】:

      我遇到了同样的问题,并在github 上找到了解决方案。 为了实现你的目标,你需要先默认创建两个 Ingress,没有任何限制:

      apiVersion: extensions/v1beta1
       kind: Ingress
       metadata:
       name: ingress-test
       spec:
         rules:
         - host: host.host.com
         http:
            paths:
              - path: /service-mapping
            backend:
               serviceName: /service-mapping
               servicePort: 9042
      

      然后,如doc 中所述,为身份验证创建一个secret

      创建htpasswd

      $ htpasswd -c auth foo
      New password: <bar>
      New password:
      Re-type new password:
      Adding password for user foo
      

      创建secret

      $ kubectl create secret generic basic-auth --from-file=auth
      secret "basic-auth" created
      

      对您需要限制的路径进行身份验证的第二个 Ingress:

      apiVersion: extensions/v1beta1
      kind: Ingress
      metadata:
        name: ingress-with-auth
        annotations:
          # type of authentication
          nginx.ingress.kubernetes.io/auth-type: basic
          # name of the secret that contains the user/password definitions
          nginx.ingress.kubernetes.io/auth-secret: basic-auth
          # message to display with an appropiate context why the authentication is required
          nginx.ingress.kubernetes.io/auth-realm: "Authentication Required - foo"
      spec:
        rules:
        - host: host.host.com
          http:
            paths:
            - path: /admin
              backend:
                serviceName: service_name
                servicePort: 80
      

      根据sedooe answer,他的解决方案可能有一些问题。

      【讨论】:

      • 我现在通过简单的配置处理了路径拒绝,但感谢您在入口处详细回答 Http Authentication spec。我会试试看 。再次感谢:)
      【解决方案3】:

      你可以使用server-snippet注解。 This 似乎正是您想要实现的目标。

      【讨论】:

      • 我用 nginx annotations 处理了这个问题。谢谢它的工作原理!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-03
      • 1970-01-01
      • 2021-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多