|
この文書は自動機械翻訳技術を使用して翻訳されています。 正確な翻訳を提供するように努めておりますが、翻訳された内容の完全性、正確性、信頼性については一切保証いたしません。 相違がある場合は、元の英語版 英語 が優先され、正式なテキストとなります。 |
Rancherで外部ゲートウェイを使用する
ゲートウェイAPIネットワークエクスポージャタイプを使用する場合、Rancherは独自のゲートウェイリソースを作成および管理できます。ただし、独自に管理している既存のゲートウェイ(たとえば、複数のアプリケーションで使用される共有ゲートウェイ)がある場合は、Rancherにトラフィックをルーティングするために独自のHTTPRouteリソースを作成する必要があります。
このセクションでは、外部管理されたゲートウェイを使用する際に必要なHTTPRouteリソースを手動で作成する方法について説明します。
前提条件
-
クラスター内で構成され、稼働中の既存のゲートウェイリソース
-
ゲートウェイの知識:
-
名前とネームスペース
-
HTTPおよび/またはHTTPSトラフィックのリスナー名(sectionName)
-
-
networkExposure.type`が`gateway`以外の何かに設定されたRancherがインストールされている(例:`none`または`ingress)
クロスネームスペースゲートウェイ要件
ゲートウェイがRancherとは異なるネームスペースにある場合(例:`gateway-system`のゲートウェイ、`cattle-system`のRancher)、ゲートウェイはRancherネームスペースからのHTTPRouteを受け入れるように構成する必要があります。デフォルトでは、ゲートウェイAPIはゲートウェイと同じネームスペースからのルートのみを許可します。
ゲートウェイの所有者は、関連するリスナーで`allowedRoutes`を構成する必要があります。2つのオプションがあります:
オプション1:すべてのネームスペースからのルートを許可する
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
name: shared-gateway
namespace: gateway-system
spec:
gatewayClassName: example
listeners:
- name: https
port: 443
protocol: HTTPS
allowedRoutes:
namespaces:
from: All
- name: http
port: 80
protocol: HTTP
allowedRoutes:
namespaces:
from: All
オプション2:特定のネームスペースからのルートを許可する(より制限的)
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
name: shared-gateway
namespace: gateway-system
spec:
gatewayClassName: example
listeners:
- name: https
port: 443
protocol: HTTPS
allowedRoutes:
namespaces:
from: Selector
selector:
matchLabels:
shared-gateway-access: "true"
- name: http
port: 80
protocol: HTTP
allowedRoutes:
namespaces:
from: Selector
selector:
matchLabels:
shared-gateway-access: "true"
セレクターアプローチを使用する場合、Rancherネームスペースに必要なラベルがあることを確認してください:
kubectl label namespace cattle-system shared-gateway-access=true
|
ゲートウェイとRancherが同じネームスペースにある場合、追加の設定は必要ありません—デフォルトの`allowedRoutes`設定( |
Rancherサービスの値を決定する
HTTPRouteリソースを作成する前に、Rancherインストールから以下の値を特定してください:
| 値 | 決定方法 | 例 |
|---|---|---|
リリース名 |
`helm install <release-name>`で使用される名前 |
|
ネームスペース |
Rancherがインストールされているネームスペース |
|
ホスト名 |
Helmの値からの`hostname`の値 |
|
TLSモード |
Helmの値からの`tls`の値 |
|
サービスHTTP無効 |
`service.disableHTTP`の値 |
|
Rancherサービス名は次のパターンに従います:<release-name>-rancher(リリース名に「rancher」がすでに含まれている場合は`<release-name>`のみ)。
HTTPRoute設定
プライマリHTTPRoute
ゲートウェイからRancherサービスへのトラフィックを指示するHTTPRouteを作成します。設定はTLSのセットアップに依存します:
ゲートウェイまたはKubernetes内でTLSが終了する場合(tls: ingress、tls: secret、または`tls: letsEncrypt`):
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: rancher
namespace: cattle-system # Must match Rancher's namespace
spec:
parentRefs:
- name: <your-gateway-name>
namespace: <your-gateway-namespace>
sectionName: <your-https-listener-name> # Your Gateway's HTTPS listener
hostnames:
- <your-rancher-hostname> # e.g., rancher.example.com
rules:
- matches:
- path:
type: PathPrefix
value: /
backendRefs:
- name: rancher # Your Rancher service name
port: 80 # Use 443 if service.disableHTTP=true
外部でTLSが終了する場合(tls: external):
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: rancher
namespace: cattle-system
spec:
parentRefs:
- name: <your-gateway-name>
namespace: <your-gateway-namespace>
sectionName: <your-http-listener-name> # Your Gateway's HTTP listener
hostnames:
- <your-rancher-hostname>
rules:
- matches:
- path:
type: PathPrefix
value: /
backendRefs:
- name: rancher
port: 80
HTTPからHTTPSへのリダイレクトルート(オプション)
Kubernetes で TLS が終了する場合(外部ではなく)、HTTP トラフィックを HTTPS にリダイレクトすることを検討してください。追加の HTTPRoute を作成します:
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: rancher-http-redirect
namespace: cattle-system
spec:
parentRefs:
- name: <your-gateway-name>
namespace: <your-gateway-namespace>
sectionName: <your-http-listener-name> # Your Gateway's HTTP listener
hostnames:
- <your-rancher-hostname>
rules:
- filters:
- type: RequestRedirect
requestRedirect:
scheme: https
statusCode: 301
extraObjects を使用する
これらの HTTPRoute リソースを extraObjects 値を使用して Rancher Helm インストールに直接含めることができます。これにより、すべてのリソースが一緒に管理されます:
# values.yaml
hostname: rancher.example.com
tls: ingress
extraObjects:
- apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: rancher
spec:
parentRefs:
- name: my-shared-gateway
namespace: gateway-system
sectionName: https
hostnames:
- rancher.example.com
rules:
- matches:
- path:
type: PathPrefix
value: /
backendRefs:
- name: rancher
port: 80
- apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: rancher-http-redirect
spec:
parentRefs:
- name: my-shared-gateway
namespace: gateway-system
sectionName: http
hostnames:
- rancher.example.com
rules:
- filters:
- type: RequestRedirect
requestRedirect:
scheme: https
statusCode: 301
バックエンドポートの選択
backendRefs のポートは、service.disableHTTP 設定に依存します:
service.disableHTTP |
バックエンドポート |
|---|---|
|
|
|
|
リスナー選択の概要
| TLS設定 | プライマリルートリスナー | リダイレクトルート |
|---|---|---|
|
HTTP リスナー |
必要ありません |
|
HTTPS リスナー |
HTTP リスナー(オプション) |
|
HTTPS リスナー |
HTTP リスナー(オプション) |
|
HTTPS リスナー |
HTTP リスナー(オプション) |
トラブルシューティング
HTTPRoute が受け入れられていません:
-
ゲートウェイ名とネームスペースが正しいことを確認してください
-
sectionNameがゲートウェイの既存のリスナーと一致していることを確認してください -
リスナーがRancherネームスペースからのルートを許可していることを確認してください(Gatewayの`allowedRoutes`設定を参照)
接続が拒否されるか、タイムアウトが発生しました:
-
Rancherサービスが存在し、エンドポイントがあることを確認してください:
kubectl get endpoints rancher -n cattle-system -
バックエンドポートがあなたの`service.disableHTTP`設定と一致していることを確認してください
証明書エラー:
-
`tls: ingress`または`tls: secret`を使用している場合は、GatewayのHTTPSリスナーに適切な証明書が設定されていることを確認してください
-
証明書があなたのRancherホスト名をカバーしていることを確認してください