項目一覧
Cloud-Native Routerのユースケースと構成の概要
この章では、コンテナネットワークインターフェイス(CNI)モードで導入した場合の、Juniper Cloud-Native Routerのさまざまなユースケースの設定例について説明します。
Juniper Cloud-Native Routerは、仮想スイッチまたはトランジットルーターとして、純粋なコンテナネットワーク機能(CNF)またはコンテナネットワークインターフェイス(CNI)として導入できます。CNF モードでは、ノード上で実行されるアプリケーション ポッドはなく、ルーターはシステム上のさまざまなインターフェイスを介してパケット化スイッチングまたは転送のみを実行します。CNIモードでは、veth-pairsやDPDK vhost-userベースのインターフェイスなどのソフトウェアベースのネットワークインターフェイスを使用するアプリケーションポッドがCloud-Native Routerに接続されます。この章では、さまざまなタイプのワークロードインターフェイスをクラウドネイティブルーターCNIインスタンスに接続するための設定例を示します。
設定例
Cloud-Native Router CNIは、MultusをプライマリCNIとしてとともにセカンダリCNIとして導入され、アプリケーションポッド用にさまざまなタイプのセカンダリインターフェイスを作成します。Multus は、ネットワーク添付ファイル定義 (NAD) ファイルを使用して、アプリケーションポッドのセカンダリインターフェイスを設定します。NADは、セカンダリインターフェイス、IPアドレスの割り当て、ネットワークインスタンスなどの作成方法を指定します。ポッドには 1 つ以上の NAD(通常はポッド インターフェイスごとに 1 つ)を含めることができます。ザconfig: フィールドは、Cloud-Native Router 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"
}
]
}'
| キー | の説明 |
|---|---|
| インスタンス名 | ルーティングインスタンス名 |
| instanceType | 次のいずれかです。 virtual-router:非 VPN 関連アプリケーション向け vrf—レイヤー 3 VPN 実装 virtual-switch—レイヤー 2 実装 |
| interfaceType (インターフェイス タイプ) | 「veth」または「virtio」のいずれか |
| vlanId(vlanId) | 有効なVLAN ID「1-4095」 |
| ブリッジVlanId | 有効なVLAN ID「1-4095」 |
| vlanIdList | コマンド区切りのvlan-idのリスト(例:「1, 5, 7, 10-20」) |
| 親インターフェイス | ポッドに表示される有効なインターフェイス名。子/サブインターフェイスには、プレフィックスとして parentInterface の後に "." が付きます。 parentInterface を指定する場合は、サブインターフェイスを明示的に指定する必要があります。 |
| vrfターゲット | vrf ルーティング インスタンスのルートターゲット |
| ブリッジドメイン | 仮想スイッチ インスタンスでポッド インターフェイスを接続するブリッジ ドメイン。 |
| タイプ(IPAM) | [静的(Static)]:すべてのポッドに同じ 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 ファイルの annotations セクションを読み取り、対応する NAD を参照します。CNIプラグインとしてNADが jcnr を指している場合、MultusはJCNR-CNIを呼び出してポッドインターフェイスを設定します。JCNR-CNIは、NADで指定されているとおりにインターフェイスを作成します。次に、JCNR-CNIは設定を生成し、cRPDにプッシュします。
トラブルシューティング
ポッドのメインは、さまざまな理由で起動しません。
-
画像が見つかりません
-
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