web-dev-qa-db-ja.com

KubernetesIngressネットワークが一部のパスを拒否する

単純な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 
5
ColossusMark1

同じ問題に直面し、 github で解決策を見つけました。目標を達成するには、最初にデフォルトで制限なしに2つのイングレスを作成する必要があります。

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

制限する必要のあるパスの認証を使用した2番目の入力:

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 によると、彼の解決策にはいくつかの問題があるかもしれません。

3
Nick Rak

server-snippet アノテーションを使用できます。 This まさにあなたが達成したいことのようです。

3
sedooe