このページの目次
JCNR 設定のカスタマイズ
概要 ConfigMap を使用して JCNR 構成をカスタマイズする方法については、このトピックをお読みください。
JCNR コンフィグマップ
Juniper Cloud-Native Router(JCNR)リリース23.3以降、JCNRは、L3モードで展開された場合に、ConfigMapを使用した設定のカスタマイズをサポートしています。クラウドベースのデプロイメントでは、ノードに障害が発生した場合、JCNR ポッドが新しいノードまたは異なるノードに生成されることがあります。ConfigMap は、ノード名から構成パラメーターを分離し、代わりにノード ラベルに基づきます。これにより、JCNR CNIデプロイヤーは、ノードに一致するラベルが使用可能である限り、構成パラメーターを消費し、それらをcRPD構成テンプレートに適用し、構成をレンダリングすることができます。ConfigMap は、キーと値のペアでデータを格納するための API オブジェクトです。ConfigMap は、ラベルに一致するノードによって使用されるノードごとの変数を定義します。キーと値のペアは、go テンプレートを介して設定をレンダリングするために使用されます。設定されたテンプレートは、 Juniper_Cloud_Native_Router_release_number/helmchart/charts/jcnr-cni/files/ cRPDポッドに適用される設定のディレクトリで使用可能である必要があります。
JCNR をインストールする前に ConfigMap を適用して、カスタム構成で cRPD ポッドを作成する必要があります。JCNR のインストール後、いつでも設定パラメータを適用する場合は、cRPD ポッドを削除して再生成する必要があります。構成パラメーターは、新しく生成された cRPD ポッドにデフォルトで適用されます。ConfigMap による JCNR のカスタマイズはオプションです。
JCNR は、以前のリリースとの後方互換性のために、ノード・アノテーションによるカスタマイズもサポートしています。ノード・アノテーションがノード名と結合されていることを考慮すると、特にクラウド・デプロイメントの場合、ConfigMap を介して JCNR をカスタマイズすることを強くお勧めします。詳しくは、 ノード・アノテーションを使用したJCNR構成のカスタマイズ を参照してください。
設定例
サンプルの ConfigMap ファイルとテンプレート ファイルは、ディレクトリの下にあります Juniper_Cloud_Native_Router_<release-number>/helmchart/cRPD_examples 。
クラスター内のさまざまなノードラベルのキーと値のペアを定義します。ファイルの例を次に示します jcnr-params-configmap.yaml 。
apiVersion: v1
kind: ConfigMap
metadata:
name: jcnr-params
namespace: jcnr
data:
jcnr1: |
{
"isoLoopbackAddr": "49.0004.1000.0000.0001.00",
"IPv4LoopbackAddr": "110.1.1.2",
"srIPv4NodeIndex": "2000",
"srIPv6NodeIndex": "3000",
"BGPIPv4Neighbor": "110.1.1.254",
"BGPLocalAsn": "64512"
}
jcnr2: |
{
"isoLoopbackAddr": "49.0004.1000.0000.0000.00",
"IPv4LoopbackAddr": "110.1.1.3",
"srIPv4NodeIndex": "2001",
"srIPv6NodeIndex": "3001",
"BGPIPv4Neighbor": "110.1.2.254",
"BGPLocalAsn": "64512"
}
アノテーションで定義したキーと値のペアは、goテンプレートを介してcRPD設定をレンダリングするために使用されます。テンプレート ファイルの例 jcnr-cni-custom-config-cm.tmpl を以下に示します。
apply-groups [custom];
groups {
custom {
interfaces {
lo0 {
unit 0 {
{{if .Params.isoLoopbackAddr}}
family iso {
address {{.Params.isoLoopbackAddr}};
}
{{end}}
family inet {
address {{.Params.IPv4LoopbackAddr}};
}
}
}
}
routing-options {
router-id {{.Params.IPv4LoopbackAddr}}
route-distinguisher-id {{.Params.IPv4LoopbackAddr}}
}
protocols {
isis {
interface all;
{{if and .Env.SRGB_START_LABEL .Env.SRGB_INDEX_RANGE}}
source-packet-routing {
srgb start-label {{.Env.SRGB_START_LABEL}} index-range {{.Env.SRGB_INDEX_RANGE}};
node-segment {
{{if .Params.srIPv4NodeIndex}}
ipv4-index {{.Params.srIPv4NodeIndex}};
{{end}}
{{if .Params.srIPv6NodeIndex}}
ipv6-index {{.Params.srIPv6NodeIndex}};
{{end}}
}
}
{{end}}
level 1 disable;
}
ldp {
interface all;
}
mpls {
interface all;
}
}
policy-options {
# policy to signal dynamic UDP tunnel attributes to BGP routes
policy-statement udp-export {
then community add udp;
}
community udp members encapsulation:0L:13;
}
protocols {
bgp {
group jcnrbgp1 {
type internal;
local-address {{.Params.IPv4LoopbackAddr}};
local-as {{.Params.BGPLocalAsn}};
neighbor {{.Params.BGPIPv4Neighbor}};
family inet-vpn {
unicast;
}
family inet6-vpn {
unicast;
}
}
}
}
routing-options {
dynamic-tunnels {
dyn-tunnels {
source-address {{.Params.IPv4LoopbackAddr}};
udp;
destination-networks {{.Params.BGPIPv4Neighbor}}/32;
}
}
}
}
}
テンプレートで追加のcRPD設定階層を定義できます。で定義された jcnr-params-configmap.yaml ConfigMap からレンダリングされる値は、 として {{.Params.var-name}}定義する必要があります。で values.yaml定義された変数などの環境変数は、 として {{.Env.variable_name}}定義する必要があります。
カスタマイズを適用するには、次の手順を実行します。
-
ConfigMap で使用されるキーに基づいて各ノードにラベルを付けます。
kubectl label nodes <node_name1> jcnr.juniper.net/params-profile=jcnr1 kubectl label nodes <node_name2> jcnr.juniper.net/params-profile=jcnr2
- 次のコマンドを使用して、ConfigMap をクラスター ノードに適用します。
# kubectl apply -f jcnr-params-configmap.yaml configmap/jcnr-params created
- テンプレートを構成したら、ファイルをディレクトリ
Juniper_Cloud_Native_Router_release_number/helmchart/charts/jcnr-cni/files/にコピーするjcnr-cni-custom-config.tmpl必要があります。# cp Juniper_Cloud_Native_Router_release_number/helmchart/cRPD_examples/jcnr-cni-custom-config-cm.tmpl Juniper_Cloud_Native_Router_release_number/helmchart/charts/jcnr-cni/files/ #
- cRPDを含むクラウドネイティブなルーターコンポーネントを導入します。インストールが完了したら、cRPD CLIにアクセスし、 モードで コマンド
cliを発行show configuration | display setして、適用したカスタム設定を表示します。root@jcnr-01> show configuration ## Last commit: 2023-06-23 08:30:42 EDT by root version 20230608.143922_builder.r1342735; groups { base { /* OMITTED */ }; custom { interfaces { lo0 { unit 0 { family inet { address 110.1.1.2/32; } family iso { address 49.0004.1000.0000.0001.00; } } } } policy-options { # policy to signal dynamic UDP tunnel attributes to BGP routes policy-statement udp-export { then { community add udp; } } community udp members encapsulation:0L:13; } routing-options { route-distinguisher-id 110.1.1.2; router-id 110.1.1.2; dynamic-tunnels { dyn-tunnels { source-address 110.1.1.2; udp; destination-networks { 110.1.1.254/32; } } } } protocols { bgp { group jcnrbgp1 { type internal; local-address 110.1.1.2; family inet-vpn { unicast; } family inet6-vpn { unicast; } local-as 64512; neighbor 110.1.1.254; } } isis { interface all; source-packet-routing { srgb start-label 400000 index-range 4000; node-segment { ipv4-index 2000; ipv6-index 3000; } } level 1 disable; } ldp { interface all; } mpls { interface all; } } } cni { /* OMITTED */ }; internal { /* OMITTED */ }; } apply-groups [ custom base internal ];
コンフィグマップの変更
JCNR のインストール後にいつでも ConfigMap を変更する場合は、次のコマンドを使用して cRPD ポッドを削除し、再生成する必要があります。kubectl patch sts kube-crpd-worker-sts -n jcnr -p '{"spec":{"template":{"metadata":{"annotations":{"configmap-reload/timestamp":"'$(date +%s)'"}}}}}'
トラブルシューティング
cRPDポッドは、無効な設定がレンダリングされ、goテンプレートを介して適用された場合、状態で再起動CrashLoopBackOffし続けます。レンダリングされたコンフィギュレーションは、 として JCNR ホストjuniper.conf.master上のディレクトリーに保存されます/config。レンダリングされた設定を実行中のcRPDポッドに手動で適用して、設定を検証し、問題を特定できます。AWS EKS デプロイの場合、レンダリングされた設定は、/configディレクトリの cRPD ポッド内にあります。