Cloud-Native Router設定のカスタマイズ
このトピックでは、Configletのカスタムリソースを使用して Cloud-Native Routerの設定をカスタマイズする方法をご紹介します。
コンフィグレットカスタムリソース
Juniper Cloud-Native Router(JCNR)リリース24.2以降、コンフィグレットのカスタムリソースを使用したCloud-Native Router設定のカスタマイズがサポートされています。コンフィグレットは、サポートされているJunos設定の事前定義済みテンプレートをレンダリングするか、または未加工の設定を使用して生成できます。生成された設定は検証され、1つ以上の Junos設定グループとしてクラウドネイティブルーターコントローラ(cRPD)に導入されます。
CLIから直接クラウドネイティブルータコントローラ(cRPD)を設定することは推奨しません。コンフィグレットのカスタムリソースを使用して、すべての設定を実行する必要があります。cRPD CLIを介して直接実行された設定は、ノードの再起動やポッドのクラッシュを経ても保持されません。
設定例
jcnr
名前空間でConfiglet
種類のコンフィグレットカスタムリソースを作成します。未加工の設定は、Junos set
コマンドとして提供します。
crpdSelector
を使用して、コンフィグレットが適用される場所を制御します。生成された設定は、指定されたラベルのみに一致するノード上のcRPDポッドに展開されます。crpdSelector
が定義されていない場合、設定はクラスタ内のすべてのcRPDポッドに適用されます。
コンフィグレットの yaml の例を以下に示します。
apiVersion: configplane.juniper.net/v1 kind: Configlet metadata: name: configlet-sample # <-- Configlet resource name namespace: jcnr spec: config: |- set interfaces lo0 unit 0 family inet address 10.10.10.1/32 crpdSelector: matchLabels: node: worker # <-- Node label to select the cRPD pods
また、キーまたは変数を含むテンプレート化されたコンフィグレット yaml を使用することもできます。変数の値は、 configletDataValueRef
によって参照される configletDataValue カスタム リソースによって提供されます。テンプレート化されたコンフィグレット yaml の例を以下に示します。
apiVersion: configplane.juniper.net/v1 kind: Configlet metadata: name: configlet-sample-with-template # <-- Configlet resource name namespace: jcnr spec: config: |- set interfaces lo0 unit 0 family inet address {{ .Ip }} crpdSelector: matchLabels: node: worker # <-- Node label to select the cRPD pods configletDataValueRef: name: "configletdatavalue-sample" # <-- Configlet Data Value resource name
テンプレートを使用して設定をレンダリングするには、ConfigletDataValue カスタムリソースでキーと値のペアを指定する必要があります。
apiVersion: configplane.juniper.net/v1 kind: ConfigletDataValue metadata: name: configletdatavalue-sample namespace: jcnr spec: data: { "Ip": "127.0.0.1" # <-- Key:Value pair }
生成された設定は検証され、 Junos設定グループとしてすべてまたは選択したcRPDポッドに適用されます。
コンフィグレットリソースの適用
未加工の設定の適用
raw 構成コンフィグレット yaml を作成します。以下の例では、cRPDでループバックインターフェイスを設定しています。
cat configlet-sample.yaml
apiVersion: configplane.juniper.net/v1 kind: Configlet metadata: name: configlet-sample namespace: jcnr spec: config: |- set interfaces lo0 unit 0 family inet address 10.10.10.1/32 crpdSelector: matchLabels: node: worker
kubectl apply
コマンドを使用して設定を適用します。kubectl apply -f configlet-sample.yaml
configlet.configplane.juniper.net/configlet-sample created
コンフィグレットを確認します。
コンフィグレットリソースがデプロイされると、
crpdSelector
に一致するノードごとに 1 つずつ、追加のノードコンフィグレットカスタムリソースが作成されます。kubectl get nodeconfiglets -n jcnr
NAME AGE configlet-sample-node1 10m
コンフィグレット yaml で定義された構成が無効であるか、デプロイに失敗した場合は、ノードコンフィグレットカスタムリソースの
kubectl describe
を使用してエラーメッセージを表示できます。例えば:
kubectl describe nodeconfiglet configlet-sample-node1 -n jcnr
簡潔にするために、次の出力は省略されています。
Name: configlet-sample-node1 Namespace: jcnr Labels: core.juniper.net/nodeName=node1 Annotations: <none> API Version: configplane.juniper.net/v1 Kind: NodeConfiglet Metadata: Creation Timestamp: 2024-06-13T16:51:23Z ... Spec: Clis: set interfaces lo0 unit 0 address 10.10.10.1/32 Group Name: configlet-sample Node Name: node1 Status: Message: load-configuration failed: syntax error Status: False Events: <none>
オプションで、CLIモードの アクセスcRPD CLI シェルで設定を確認します。設定は、コンフィグレットリソースにちなんで名付けられた設定グループとして適用されることに注意してください。
show configuration groups configlet-sample
interfaces { lo0 { unit 0 { family inet { address 10.10.10.1/32; } } } }
手記:コンフィグレットを使用して生成された設定は、設定グループとしてcRPDに適用されます。そのため、コンフィグレットを指定する際には、コンフィギュレーション グループを使用しないことをお勧めします。
テンプレート化された設定の適用
テンプレート化されたコンフィグレット yaml と、キーと値のペアのコンフィグレット データ値 yaml を作成します。
cat configlet-sample-template.yaml
apiVersion: configplane.juniper.net/v1 kind: Configlet metadata: name: configlet-sample-template namespace: jcnr spec: config: |- set interfaces lo0 unit 0 family inet address {{ .Ip }} crpdSelector: matchLabels: node: master configletDataValueRef: name: "configletdatavalue-sample"
cat configletdatavalue-sample.yaml
apiVersion: configplane.juniper.net/v1 kind: ConfigletDataValue metadata: name: configletdatavalue-sample namespace: jcnr spec: data: { "Ip": "127.0.0.1" }
kubectl apply
コマンドを使用して、config データ値 yaml から始めて設定を適用します。kubectl apply -f configletdatavalue-sample.yaml
configletdatavalue.configplane.juniper.net/configletdatavalue-sample created
kubectl apply -f configlet-sample-template.yaml
configlet.configplane.juniper.net/configlet-sample-template created
コンフィグレットを確認します。
コンフィグレットリソースがデプロイされると、
crpdSelector
に一致するノードごとに 1 つずつ、追加のノードコンフィグレットカスタムリソースが作成されます。kubectl get nodeconfiglets -n jcnr
NAME AGE configlet-sample-template-node1 10m
コンフィグレット yaml で定義された設定が無効であるか、デプロイに失敗した場合は、ノードコンフィグレットカスタムリソースの
kubectl describe
を使用してエラーメッセージを表示できます。例えば:
kubectl describe nodeconfiglet configlet-sample-template-node1 -n jcnr
簡潔にするために、次の出力は省略されています。
Name: configlet-sample-template-node1 Namespace: jcnr Labels: core.juniper.net/nodeName=node1 Annotations: <none> API Version: configplane.juniper.net/v1 Kind: NodeConfiglet Metadata: Creation Timestamp: 2024-06-13T16:51:23Z ... Spec: Clis: set interfaces lo0 unit 0 address 10.10.10.1/32 Group Name: configlet-sample-template Node Name: node1 Status: Message: load-configuration failed: syntax error Status: False Events: <none>
オプションで、CLIモードの アクセスcRPD CLI シェルで設定を確認します。設定は、コンフィグレットリソースにちなんで名付けられた設定グループとして適用されることに注意してください。
show configuration groups configlet-sample-template
interfaces { lo0 { unit 0 { family inet { address 127.0.0.1/32; } } } }
コンフィグレットの変更
コンフィグレットリソースを変更するには、yaml ファイルを変更し、 kubectl apply
コマンドを使用して再適用します。
kubectl apply -f configlet-sample.yaml
configlet.configplane.juniper.net/configlet-sample configured
既存のコンフィグレットリソースへの変更は、cRPDの設定グループを置き換えることで調整されます。
kubectl delete
コマンドを使用してコンフィグレットリソースを削除することで、設定グループを削除できます。
kubectl delete configlet configlet-sample -n jcnr
configlet.configplane.juniper.net "configlet-sample" deleted
トラブルシューティング
問題が発生した場合は、 contrail-k8s-deployer
ログを確認してください。例えば:
kubectl logs contrail-k8s-deployer-8ff895cc5-cbfwm -n contrail-deploy