JCNR 設定のカスタマイズ
概要 Configletカスタム・リソースを使用してJCNR構成をカスタマイズする方法については、このトピックをお読みください。
コンフィグレットカスタムリソース
Juniper Cloud-Native Router(JCNR)リリース24.2以降、コンフィグレットカスタムリソースを使用したJCNR設定のカスタマイズがサポートされています。コンフィグレットは、サポートされているJunos設定の定義済みテンプレートをレンダリングするか、未加工の設定を使用して生成できます。生成された設定は検証され、1つ以上の Junos設定グループとしてJCNRコントローラ(cRPD)に展開されます。
CLIから直接JCNRコントローラ(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
キーまたは変数を含むテンプレート化された configlet 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 }
生成された設定は検証され、すべてまたは選択した cRPD ポッドに Junos 設定グループとして適用されます。
コンフィグレットリソースの適用
未加工の構成を適用する
未加工の構成コンフィグレット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モードの AccesscRPD CLI シェルで設定を確認します。この設定は、configletリソースにちなんで名付けられた設定グループとして適用されることに注意してください。
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
コマンドを使用して、構成データ値 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
configlet yaml で定義された設定が無効であるか、デプロイに失敗した場合は、ノード configlet カスタムリソースの
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モードの AccesscRPD CLI シェルで設定を確認します。この設定は、configletリソースにちなんで名付けられた設定グループとして適用されることに注意してください。
show configuration groups configlet-sample-template
interfaces { lo0 { unit 0 { family inet { address 127.0.0.1/32; } } } }
コンフィグレットの変更
configlet リソースを変更するには、yaml ファイルを変更し、 kubectl apply
コマンドを使用して再適用します。
kubectl apply -f configlet-sample.yaml
configlet.configplane.juniper.net/configlet-sample configured
既存のコンフィグレットリソースに対する変更は、cRPDの設定グループを置き換えることで調整されます。
設定グループを削除するには、 kubectl delete
コマンドを使用して configlet リソースを削除します。
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