すべてのノードのサービスをポート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つのオプションがあります。
- シンプルポート転送
- 外部IP
- 活動を続ける
シンプルポート転送
すべてのサーバーで次のコマンドを実行します。
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を使います。ただし、クライアントがサーバーにアクセスできる場合は、単純なポート転送が唯一の方法です。