シンプルポート転送

シンプルポート転送

すべてのノードのサービスをポート80と443にバインドして、DNS名(kubernetes)を介してHTTP / Sを介して直接サービスにリダイレクトし、展開(nginx)にリダイレクトするすべてのノードにリダイレクトしようとしています。しかし、NodePortの範囲は30000から32xxxまでなので、これがどのように機能するのかわかりません。

これは私の設定です。

DNS-Name      IPv4
k8s-master    172.25.35.47
k8s-node-01   172.25.36.47
k8s-node-02   172.25.36.8
kubernetes    172.25.36.47
kubernetes    172.25.36.8

私のyamlファイル

apiVersion: v1
kind: Service
metadata:
  name: proxy
spec:
  ports:
  - name: http
    nodePort: 80     
    port: 80            
    protocol: TCP      
    targetPort: 80     
  - name: https
    nodePort: 443     
    port: 443           
    protocol: TCP       
    targetPort: 443     
  selector:
    name: proxy
  type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: proxy
  labels:
    name: proxy
spec:
  selector:
    matchLabels:
      name: proxy
  replicas: 1
  template:
    metadata:
     labels:
       name: proxy
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - name: http
          containerPort: 80
          protocol: TCP
        - name: https
          containerPort: 443
          protocol: TCP

このポートを公開する機能を提供するサービスの種類は何ですか?または、精神的な設定をどのように実装しますか?

ボルカー

答え1

2つのオプションがあります。

  1. シンプルポート転送
  2. 外部IP
  3. 活動を続ける

シンプルポート転送

すべてのサーバーで次のコマンドを実行します。

sudo iptables -t nat -I PREROUTING -p tcp --dport 443 -j REDIRECT --to-ports <nodeport>
sudo iptables -t nat -I OUTPUT -p tcp -o lo --dport 443 -j REDIRECT --to-ports <nodeport>

<nodeport>nodeportに選択したポートに置き換えます。これを行うには、すべてのマシンでコマンドを実行する必要がありますが、これはやや面倒です。より良い解決策は次のとおりです。

外部IP

ドキュメントリンク

これにより、特定のノード上のすべてのポートをバインドし、クラスタを介してルーティングできます。明らかに、これは単一の障害点を提供し、次のように解決することができます。

活動を続ける

keepalivedは非常にシンプルなソフトウェアです。プライマリノードに障害が発生した場合は、他のノードを指すように移動する仮想IPアドレスを作成します。これにより、プライマリコネクション保持サーバーのエイリアスIPアドレスが効果的に生成されます。良いスタートは接続を維持 VIP、あなたが提供するサービスの接続維持を自動的に設定します。

結論として

私は個人的に私のネットワークモデルに合うので、この目的のためにkeepalived-vipを使います。ただし、クライアントがサーバーにアクセスできる場合は、単純なポート転送が唯一の方法です。

関連情報