このページの内容
クラウドネイティブルーターの使用例と構成の概要
この章では、コンテナネットワークインターフェイス(CNI)モードで導入した場合のさまざまなジュニパークラウドネイティブルーターの使用例を確認します。
ジュニパークラウドネイティブルーターは、仮想スイッチまたはトランジットルーターとして、ピュアコンテナネットワーク機能(CNF)またはコンテナネットワークインターフェイス(CNI)として導入できます。CNFモードでは、ノードで実行されているアプリケーションポッドはなく、ルーターはシステム上のさまざまなインターフェイスを介したパケット、スイッチング、または転送のみを実行します。CNIモードでは、vethペアやDPDK vhostユーザーベースのインターフェイスなどのソフトウェアベースのネットワークインターフェイスを使用するアプリケーションポッドが、クラウドネイティブルーターに接続されます。この章では、さまざまなワークロードインターフェイスタイプをクラウドネイティブルーターCNIインスタンスにアタッチするための設定例を示します。
設定例
クラウドネイティブルーターCNIは、MultusをプライマリCNIとしてとともにセカンダリCNIとして導入し、アプリケーションポッド用にさまざまなタイプのセカンダリインターフェイスを作成します。Multusは、ネットワーク添付ファイル定義(NAD)ファイルを使用して、アプリケーションポッドのセカンダリインターフェイスを設定します。NAD は、セカンダリ インターフェイスの作成方法、IP アドレス割り当て、ネットワーク インスタンスなどを指定します。ポッドには1つ以上のNADを含めることができます。通常は、ポッドインターフェイスごとに1つずつ。このconfig: NADファイル内のフィールドは、クラウドネイティブルーターのCNI設定を定義します。NADの一般的な形式は次のとおりです。apiVersion: "k8s.cni.cncf.io/v1"
kind: NetworkAttachmentDefinition
metadata:
name: <vrf-name>
spec:
config: '{
"cniVersion":"0.4.0",
"name": "<vrf-name>",
"plugins": [
{
"type": "jcnr",
"args": {
"key1":"value1",
"key2","value2",
....
},
"ipam": {
"type": "<ipam-type>",
....
},
"kubeConfig":"/etc/kubernetes/kubelet.conf"
}
]
}'
| カギ | 説明 |
|---|---|
| インスタンス名 | ルーティングインスタンス名 |
| インスタンスタイプ | 次のいずれか:
virtual-ルーター—VPN関連以外のアプリケーション向け vrf—レイヤー3 VPN実装 virtual-switch—レイヤー2実装 |
| インターフェイスタイプ | 「veth」または「virtio」のいずれか |
| vlanId | 有効なVLAN ID「1-4095」 |
| bridgeVlanId | 有効なVLAN ID「1-4095」 |
| vlanIdリスト | コマンドで区切られたvlan-idのリスト(例:「1、5、7、10-20」)。 |
| 親インターフェイス | ポッドに表示されるはずの有効なインターフェイス名。子/サブインターフェイスのプレフィックスとしてparentInterfaceの後に「」が付きます。parentInterface を指定する場合は、sub interface を明示的に指定する必要があります。 |
| vrfターゲット | vrf ルーティング インスタンスのルートターゲット |
| ブリッジドメイン | 仮想スイッチインスタンスで接続する必要があるポッドインターフェイスのブリッジドメイン。 |
| タイプ(IPAM) | 静的—すべてのポッドに同じIPを割り当て、ポッドごとに一意のIPを割り当てるには、インターフェイスごとにポッドごとに一意のNADを定義します
host-local—同じホスト上のポッドインターフェイスごとの一意のIPアドレス。IPアドレスは、2つの異なるノード間で一意ではありません 場所—すべてのノードにわたるポッドごとの一意のIPアドレス |
apiVersion: "k8s.cni.cncf.io/v1"
kind: NetworkAttachmentDefinition
metadata:
name: vswitch-pod1-bd100
spec:
config: '{
"cniVersion":"0.4.0",
"name": "vswitch-pod1-bd100",
"plugins": [
{
"type": "jcnr",
"args": {
"instanceName": "vswitch",
"instanceType": "virtual-switch",
"interfaceType": "veth",
"bridgeDomain": "bd100",
"bridgeVlanId": "100"
},
"ipam": {
"type": "static",
"addresses":[
{
"address":"99.61.0.2/16",
"gateway":"99.61.0.1"
},
{
"address":"1234::99.61.0.2/120",
"gateway":"1234::99.61.0.1"
}
]
},
"kubeConfig":"/etc/kubernetes/kubelet.conf"
}
]
}'
k8s.v1.cni.cncf.io/networks アノテーション。次に例を示します。apiVersion: v1
kind: Pod
metadata:
name: pod1
annotations:
k8s.v1.cni.cncf.io/networks: vswitch-pod1-bd100
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- kind-worker
containers:
- name: pod1
image: ubuntu:latest
imagePullPolicy: IfNotPresent
securityContext:
privileged: false
env:
- name: KUBERNETES_POD_UID
valueFrom:
fieldRef:
fieldPath: metadata.uid
volumeMounts:
- name: dpdk
mountPath: /dpdk
subPathExpr: $(KUBERNETES_POD_UID)
volumes:
- name: dpdk
hostPath:
path: /var/run/jcnr/containers
/dpdk/dpdk-interfaces.json DPDKアプリケーションが使用するアプリケーションコンテナー内。また、ポッド注釈としてポッドにエクスポートされます。
クラウドネイティブルーターで使用するポッドを作成すると、 kubelet として知られるKubernetesコンポーネントがMultus CNIを呼び出して、ポッドのネットワーキングとインターフェイスを設定します。Multusは pod.yaml ファイルのアノテーションセクションを読み取り、対応するNADを参照します。NADがCNIプラグインとして jcnr を指している場合、MultusはJCNR-CNIを呼び出してポッドインターフェイスを設定します。JCNR-CNIは、NADで指定されたとおりにインターフェイスを作成します。次に、JCNR-CNIが設定を生成し、cRPDにプッシュします。
トラブルシューティング
Pods mainはさまざまな理由で起動しません。
-
イメージが見つかりません
-
CNIはインターフェースを追加できませんでした
-
CNIが設定をcRPDにプッシュできませんでした
-
CNIがvRouter REST APIを呼び出せませんでした
-
NADが無効または未定義です
次のコマンドは、ポッドの問題のトラブルシューティングに役立ちます。
# Check the Pod status kubectl get pods –A
# Check pod state and CNI logs kubectl describe pod <pod-name>
# Check the pod logs kubectl logs pod <pod-name>
# Check the net-attach-def kubectl get net-attach-def <net-attach-def-name> -o yaml
# Check CNI logs tail –f /var/log/jcnr/jcnr-cni.log
# Check the cRPD config added by CNI (on the cRPD CLI) cli> show configuration groups cni