シンプル・トリック



問題
私は最近、仕事でシンプルで面白いユースケースを経験しました.
いくつかの理由で、ネットワークチームは開発者コンピュータを直接MongoDBデータベースにアクセスすることを禁じます.
Kubernetesプラットフォームだけが、マネージデータベースサービスへのネットワークアクセスを持っています.
基本的には


解決策
前の図を見ると、ここでどこに行っているかを見ることができます.開発者はK 8 Sクラスタにアクセスでき、K 8 Sクラスタは管理されたDBサービスにアクセスできます.
…これがその計画です.

そこで、ポート8080から目的のIP :ポートまでストリームTCP接続に設定された単純なNGinX K 8 Sサービスを展開しましょう.次にポートを使用して接続をリダイレクトする
あなたのMondoDBが100.101.102.103 : 27017で聞くと仮定してください
---

kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
  name: mongodb-proxy
spec:
  podSelector:
    matchLabels:
      app.kubernetes.io/name: mongodb-proxy
  ingress:
    - {}
  egress:
    - {}
  policyTypes:
    - Ingress
    - Egress

---

apiVersion: v1
kind: ConfigMap
metadata:
  name: mongodb-proxy
data:
  nginx.conf: |
    worker_processes  auto;
    error_log  /var/log/nginx/error.log notice;
    pid        /tmp/nginx.pid;


    stream {
        server {
            listen  8080 so_keepalive=on;
            proxy_connect_timeout 2s;
            proxy_pass    stream_backend;
            proxy_timeout 10m;
        }
        upstream stream_backend {
          server 100.101.102.103:27017;
        }

    }

    events {
        worker_connections  1024;
    }

---

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mongodb-proxy
spec:
  replicas: 1
  selector:
    matchLabels:
      app.kubernetes.io/component: "mongodb-proxy"
  template:
    metadata:
      labels:
        app.kubernetes.io/component: "mongodb-proxy"
    spec:
      serviceAccountName: default
      securityContext: {}
      containers:
        - name: mongodb-proxy
          volumeMounts:
            - name: mongodb-proxy
              mountPath: /etc/nginx
          securityContext:
            readOnlyRootFilesystem: false
            runAsGroup: 1000
            runAsNonRoot: true
            runAsUser: 1000
          image: "nginx/nginx-unprivileged"
          imagePullPolicy: Always
          ports:
            - name: http
              containerPort: 8080
              protocol: TCP
            # - name: https
            #   containerPort: 443
            #   protocol: TCP
          resources:
            limits:
              cpu: 500m
              memory: 512Mi
            requests:
              cpu: 250m
              memory: 256Mi
      volumes:
        - name: mongodb-proxy
          configMap:
            name: mongodb-proxy

まず、このK 8 Sテンプレートを展開します.
注意:
  • NGinx Configファイルは、テンプレート内で直接設定され、コンフィギュレーションマップを使用してコンテナに入れられます.
  • ネットワークポリシーはあまりにも大きい(それを書くには怠惰すぎる)、
  • NGNINX非公開イメージは、我々のK 8 Sクラスタの若干のセキュリティ制限のため、使われました.
  • 今、私はちょうどMongoDBプロキシに私のコンピュータの間にポートを作成する必要があります.
    次のようになります.
    kubectl port-forward mongodb-proxy 8080:8080
    
    (私はそれをテストしなかった、私はそれを行うためにk9sを使用します).
    現在、私はlocalhostを使用している私のコンピュータから直接私のDBにアクセスすることができます:8080
    Firefoxを使って、

    このソリューションは非常に簡単に実行され、他のバックエンドの多くに適応し、単一の小さなファイルに保持することができます.