nginx - Kubernetes Ingress 网络拒绝某些路径

标签 nginx kubernetes kubernetes-ingress

我有一个简单的 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 注释或其他方法拒绝自定义路径。

我使用如下所示的注释处理这个问题。
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 

最佳答案

我遇到了同样的问题,并在 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

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

创建 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

需要限制路径的带有身份验证的第二个入口:
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 ,他的解决方案可能有一些问题。

关于nginx - Kubernetes Ingress 网络拒绝某些路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51874503/

相关文章:

linux - nginx 作为缓存代理不缓存任何东西

github - 为 nginx 用户添加 SSH-Key (for github)

docker - 暴露 Docker 端口的问题

kubernetes - 注册新的istioctl配置文件

ssl - 如何在网站之间共享自签名 TLS 证书

django - 使用istio或nginx通过前端代理后端

node.js - 部署的 node.js 应用程序未显示在默认 IP 地址上,而 nginx 默认页面工作正常

kubernetes - 在本地Kubernetes集群上安装OpenFaas

kubernetes - RocketChat android应用SSL连接问题

node.js - 用于负载均衡器类型服务的 Kubernetes SSL