簡介
本文描述如何在Catalyst 9000系列平台上實施應用程式託管並對其進行故障排除。
必要條件
需求
思科建議您瞭解以下主題:
- LAN交換基礎。
- 熟悉 Cisco IOS® XE和許可。
- 瞭解交換架構。
- 熟悉基本的Linux命令。
採用元件
本文中的資訊係根據以下軟體和硬體版本:
- Catalyst 9300
- Catalyst 9400
- Catalyst 9500
- Cisco IOS® XE & 16.12.X或17.X軟體
- 如需詳細資訊,請參閱支援的應用託管Catalyst型號。
附註:請參閱適當的組態設定指南來瞭解使用的命令,以便在其他思科平台上啟用這些功能。
本文中的資訊是根據特定實驗室環境內的裝置所建立。文中使用到的所有裝置皆從已清除(預設)的組態來啟動。如果您的網路運作中,請確保您瞭解任何指令可能造成的影響。
背景資訊
在企業網路中,應用程式對於解決各種業務關鍵型使用案例至關重要,包括協定分析器等管理工具以及入侵檢測服務等安全解決方案。傳統上,這些應用程式運行在外部物理或基於雲的虛擬伺服器上,但現代需求凸顯了此類方法的侷限性。
Cisco Catalyst 9000系列交換機通過整合為現代數字時代設計的高級功能,徹底改變了企業網路。這些交換機由Cisco IOS® XE作業系統和x86 CPU支援,不僅限於傳統網路裝置;它們作為應用託管的平台,使企業能夠整合基礎設施,為邊緣計算創造新的可能性。這樣,安全代理、IoT感測器和通訊量監控工具等應用就可以直接在交換機上運行,無需使用外部計算硬體。
應用程式託管框架的限制
要在Catalyst 9000上啟用應用程式託管框架,需要滿足以下要求:
應用託管架構
為了支援Cisco Catalyst 9000交換機上的應用託管功能,該交換機提供應用程式可以駐留和執行的硬體資源。在Cisco Catalyst 9000交換機上運行的Cisco IOS XE為應用程式託管預留專用記憶體和CPU資源,以便為使用者應用程式提供單獨的執行空間,而不會影響交換機的完整性和效能。
此外,應用程式必須駐留在其中一個外部固態驅動器(SSD)儲存選項(USB或M2 SATA)中,具體取決於特定的Cisco Catalyst 9000平台。應用程式無法訪問內部裝置快閃記憶體,該快閃記憶體為Cisco IOS XE保留以保護其完整性。
為了獲得最大靈活性和與主作業系統的完全隔離,Cisco Catalyst 9000交換機上的Cisco IOS XE核心和Cisco Application Framework通過利用控制組(Cgroups)和使用者名稱空間來支援容器化應用。Cgroups限制對物理資源的訪問,例如應用程式的CPU和記憶體。思科應用框架會檢查是否有足夠的資源來啟用和安裝應用。如果應用程式沒有可用的硬體資源,則它無法啟用應用程式,並向管理員傳送相關消息。
圖1.顯示Cisco Catalyst 9000平台上思科應用框架的視覺化表示形式:

此外,SSD儲存通過在SSD儲存上提供AES-256硬體加密,並在SSD儲存和交換機上提供密碼身份驗證,從而提供同類最佳的安全性。
AES-256加密完全在硬體中完成。使用密碼身份驗證時,必須在SSD和交換機上設定密碼。將預配置了密碼身份驗證的SSD插入沒有匹配密碼配置的Catalyst 9000交換機時,身份驗證將失敗,因為交換機沒有配置正確的密碼。如圖2所示,要成功取消身份驗證,SSD儲存和交換機上的密碼必須匹配。
如果從Catalyst 9000交換機中刪除了已配置密碼的SSD儲存並將其插入非Catalyst交換機中,則內容會受到保護且不可訪問。任何敏感資料只有在使用正確密碼在Catalyst交換機中解鎖後才能訪問。
圖2.顯示SSD儲存上的密碼身份驗證:

例如,可以使用以下命令啟用或禁用安全設定並設定密碼:
Cat9k#hw-module switch 1 usbflash1 security ?
disable disable security on USB3.0
enable Enable security on USB3.0
unlock Unlock USB3.0
Cat9k(config)#hw-module switch 1 usbflash1-password
適用於應用託管的支援的Catalyst型號
支援以下應用託管功能:
支援的平台
|
Cisco IOS XE版本
|
Catalyst 9300/L
|
16.12.1版本或更高版本
|
Catalyst 9300X
|
17.5.1版或更高版本
|
Catalyst 9300LM
|
17.9.1版或更高版本
|
Catalyst 9404和9407
|
17.1.1版或更高版本
|
Catalyst 9410
|
17.5.1版或更高版本
|
Catalyst 9400X
|
17.8.1版或更高版本
|
Catalyst 9500高效能和9600系列
|
17.5.1版或更高版本
|
Catalyst 9500X和9600X系列
|
17.8.1版或更高版本
|
附註:Cisco Catalyst 9200系列和Catalyst 9500(基於UADP 2.0):C9500-40X、C9500-16X、C9500-24Q、C9500-12Q)型號不支援應用託管。
應用程式的硬體資源
表1.包含應用的Cisco Catalyst 9000平台硬體資源:

如果預設選項不足,可以使用自定義資源配置檔案保留資源、CPU、記憶體和vCPU。有關裝置資源限制,請參閱以下資訊:

-
vCPU:這表示單個應用程式可以同時使用的虛擬CPU的最大數量。
-
CPU單元:表示分配給應用程式託管的CPU負載資源總數。每個應用程式都指定其確保可靠運行所需的最小CPU負載。
-
USB後儲存:指後面板凹入USB 3.0插槽。僅此背板USB 3.0插槽支援應用程式託管。
-
M.2 SATA儲存:是指用於應用程式資料儲存的內部固態驅動器(SSD)。
-
不適用(N):表示功能或資源不可用於指定的配置。
此示例說明如何建立自定義配置檔案:
Cat9k(config)#app-hosting appid MYAPP
Cat9k(config-app-hosting)#app-resource profile custom
Cat9k(config-app-resource-profile-custom)#cpu 7400
Cat9k(config-app-resource-profile-custom)#memory 2048
Cat9k(config-app-resource-profile-custom)#vcpu 2
應用高可用性
Catalyst 9000交換機支援應用自動重啟功能,該功能可在系統切換或重啟時保留應用上次配置的運行狀態。預設情況下,此功能處於啟用狀態,並且主用和備用交換機上都需要相同的儲存型別。
表2. Cisco Catalyst 9000平台應用自動重新啟動功能

應用程式託管框架
預設情況下未啟用應用程式託管框架。思科應用框架(CAF)由思科構建,用於管理在任何網路裝置上運行的容器化應用。CAF也稱為IOx。Cisco IOx可在網路邊緣執行IoT應用(霧計算),同時確保與Cisco IOS軟體的安全連線。它為應用程式託管保留4GB的磁碟空間。當通過CLI禁用IOx或IOx基礎設施使用SSD時,將清除分割槽和應用程式資料。
這是Cisco IOS XE CLI配置,用於啟用應用託管基礎設施:
Cat9k(config)#iox
附註:從Cisco IOS XE 16.12.1開始,IoX打包不再是強制性的。可以按原樣安裝Docker應用。這樣,使用者無需進行額外打包,即可構建並自帶應用程式。應用程式開發人員可以找到有關Cisco DevNet站點上應用程式託管的更多資訊
容器網路
該圖說明了容器的連通性體系結構。它重點介紹了Cat9k支援應用託管的所有可能的網路模式。它們包括:
- 使用專用內部AppGigabitEthernet介面的前面板資料端口交換
- 管理介面(GigabitEthernet 0/0)
AppGigabitEthernet是一個內部硬體資料埠,通過硬體交換連線到前面板資料埠。使用管理介面和前面板資料埠連線容器。在容器中,虛擬網路介面卡(vNIC)顯示為標有eth0、eth1等的標準乙太網介面。此設計有助於跨容器環境實現無縫整合和一致的網路配置。
圖3.容器網路圖:

Cisco Catalyst 9300、Catalyst 9400和Catalyst 9500X系列交換機上引入的AppGigabitEthernet介面提供專用的應用流量功能。內部硬體資料埠通過硬體交換連線到前面板資料埠。AppGigabitEthernet介面可以配置為中繼或VLAN特定介面。對於TRUNK介面,它擴展為第2層中繼埠,該埠接收的所有流量都可供應用程式使用。對於VLAN介面,通過指定VLAN ID號將應用程式連線到特定VLAN網路。
AppGigabitEthernet;介面僅在Cisco Catalyst 9300系列、Catalyst 9400系列和Catalyst 9500X交換機上可用。帶Supervisor 1的Catalyst 9410機箱要求禁用插槽4埠48(如果適用)以啟用AppGigabitEthernet埠。Catalyst 9500高效能和9600系列交換機不支援AppGigabitEthernet介面。託管在這些型號上的應用程式的連線是通過管理介面通過來自任何前面板埠的環回實現的。
附註:C9300X、C9400X-Sup-2/2XL和C9500X型號具有2個10G AppGigabitEthernet埠。
應用託管網路
對於TRUNK介面,App可以使用埠接收的所有流量:
Cat9k(config)#interface AppGigabitEthernet 1/0/1
Cat9k(config)#switchport mode trunk
Cat9k(config-if)#exit
Cat9k(config)#app-hosting appid MYAPP
Cat9k(config-app-hosting)#app-vnic AppGigabitEthernet trunk
Cat9k(config-config-app-hosting-trunk)#guest-interface
Cat9k(config-config-app-hosting-trunk-mode-guest)#end
對於VLAN介面,應用程式連線到特定VLAN:
Cat9k(config)#interface AppGigabitEthernet 1/0/1
Cat9k(config)#switchport trunk allowed vlan
Cat9k(config-if)#exit
Cat9k(config)#app-hosting appid MYAPP
Cat9k(config-app-hosting)#app-vnic AppGigabitEthernet trunk
Cat9k(config-config-app-hosting-trunk)#vlan guest-interface
Cat9k(config-config-app-hosting-trunk-mode-guest)#end
對於管理介面,應用程式連線到管理埠(GigabitEthernet0/0):
Cat9k(config)#interface gigabitEthernet 0/0
Cat9k(config-if)#ip address
Cat9k(config-if)#exit
Cat9k(config)#app-hosting appid MYAPP
Cat9k(config-app-hosting)#(config-app-hosting)#app-vnic management guest-interface
Cat9k((config-app-hosting-mgmt-gateway)#end
分配給應用容器的IP地址:可以通過交換機CLI明確分配容器介面的IP地址,也可以通過DHCP動態獲取。
通過AppGigabitEthernet為應用配置靜態IP地址:
Cat9k(config)#app-hosting appid MYAPP
Cat9k(config-app-hosting)#app-vnic AppGigabitEthernet trunk
Cat9k(config-config-app-hosting-trunk)#vlan guest-interface
Cat9k(config-config-app-hosting-vlan-access-ip)#guest-ipaddress netmask <-- Container IP Address
Cat9k(config-config-app-hosting-vlan-access-ip)#exit
Cat9k(config-config-app-hosting-trunk)#exit
Cat9k(config-app-hosting)#app-default-gateway guest-interface
Cat9k(config-app-hosting)#exit
通過GigabitEthernet 0/0為應用配置靜態IP地址:
Cat9k(config)#app-hosting appid MYAPP
Cat9k(config-app-hosting)#app-vnic management guest-interface
Cat9k(config-app-hosting-mgmt-gateway)#guest-ipaddress netmask
Cat9k(config-app-hosting-mgmt-gateway)#exit
Cat9k(config-app-hosting)#app-default-gateway guest-interface
Cat9k(config-app-hosting)#exit
為應用(DHCP)配置動態IP地址:
Cat9k(config)#app-hosting appid MYAPP
Cat9k(config-app-hosting)#app-vnic AppGigabitEthernet trunk
Cat9k(config-config-app-hosting-trunk)#vlan guest-interface
Cat9k(config-config-app-hosting-vlan-access-ip)#end
Cat9k#
Or through Interface GigabitEthernet 0/0
Cat9k(config)#app-hosting appid MYAPP
Cat9k(config-app-hosting)#app-vnic management guest-interface
Cat9k(config-app-hosting-mgmt-gateway)#end
提示:在安裝應用之前,請確保網路配置正確。如果需要更改,則停止、停用和解除安裝,然後重新啟動。
生命週期和應用程式
Cisco Catalyst 9000交換機上的應用生命週期包括三個階段,如圖4所示:
- 安裝:在此階段中,應用程式將安裝在裝置上。但是,應用程式所需的資源尚未分配。
- 啟用:應用所需的硬體資源已投入使用,以確保其正常運行。
- 開始:應用程式將轉換為操作狀態,變為完全活動且功能正常。
圖4.應用程式生命週期管理:

Docker運行時選項
如果容器應用程式需要具有運行時選項,這些選項作為命令列選項(如控制器IP、資料目錄等)傳遞,則可以使用app-resource docker命令配置這些選項。
系統支援多行運行選項字串配置。以下是使用者需要考慮的主要事項:
- 使用者最多可以輸入/複製貼上最多30行docker運行選項。
- 系統按該順序從第1行到第30行的字串生成串連字串。
- 每行run-option中的每個字串最多可以包含235個字元。
- 每個字串可以有多個完整的docker run-option,只要它們全部包含在235個字元中。
- 請注意,任何行中的運行選項字串都不能拆分為下一行。
- 無需使用空格來終止每行中的字串。當系統將所有現有run-option字串串聯成單個字串時,系統會自動為每個行生成一個空格。
- 如果使用者對「運行」選項進行了任何更改,則使用者需要停止、停用、啟用並重新啟動應用程式才能使新的運行選項生效。
以下是Docker選項及其在Cat9k交換機上可能的等效配置的示例:
docker run -v $(APP_DATA):/data --entrypoint startup.sh
Catalyst 9000交換器上的組態:
Cat9k(config)#app-hosting appid MYAPP
Cat9k(config-app-hosting)#app-resource docker
Cat9k(config-app-hosting-docker)#run-opts 1 "-v $(APP_DATA):/data"
Cat9k(config-app-hosting-docker)#run-opts 2 "--entrypoint startup.sh"
對於外部永久資料儲存,請使用命令:run-opts 1 "-v /vol/usb1/iox_host_data_share:/(APP_DATA)"
Cat9k(config)#app-hosting appid MYAPP
Cat9k(config-app-hosting)#app-resource docker
Cat9k(config-app-hosting-docker)#run-opts 1 "-v /vol/usb1/iox_host_data_share:/(APP_DATA)"
要從配置中刪除運行選項行,請執行與以下示例類似的"no"命令:
Cat9k(config)#app-hosting appid MYAPP
Cat9k(config-app-hosting)#app-resource docker
Cat9k(config-app-hosting-docker)#no run-opts 1 "-v /vol/usb1/iox_host_data_share:/(APP_DATA)"
要刪除應用程式配置中的所有運行選項,可以執行no configuration命令:
Cat9k(config)#app-hosting appid MYAPP
Cat9k(config-app-hosting)#no app-resource docker
不受支援的Docker運行時選項清單
由於安全原因或這些選項不適用於Linux平台,因此在Application Hosting Framework中不支援列出的Docker命令列選項。
Docker選項
|
說明
|
--附加
|
連線到STDIN、STDOUT或STDERR。
|
— 無重裝置
|
指定塊IO重量(相對裝置重量)。
|
—cgroup-parent
|
容器的可選父組。
|
—cidfile
|
將容器ID寫入指定的檔案。
|
—cpu-count
|
指定CPU計數(僅限Windows)。
|
—cpu-percent
|
指定CPU百分比(僅限Windows)。
|
—cpu
|
指定CPU數量(API 1.25+)。
|
—device-cgroup-rule
|
向cgroup allowed devices清單新增規則。
|
—device-read-bps
|
限制裝置的讀取速率(每秒位元組數)。
|
— 裝置讀取iops
|
限制裝置的讀取速率(I/O每秒)。
|
—device-write-bps
|
限制裝置的寫入速率(每秒位元組數)。
|
—device-write-iops
|
限制裝置的寫入速率(I/O每秒)。
|
—disable-content-trust
|
跳過影象驗證。
|
-env-file
|
從檔案中載入環境變數。
|
— 互動式(-i)
|
即使未連線,也保持STDIN開啟。
|
—io-maxbandwidth
|
系統驅動器的最大IO頻寬限制(僅限Windows)。
|
—io-maxiops
|
系統驅動器的最大IOps限制(僅限Windows)。
|
--ip
|
指定IPv4地址(示例:192.168.100.100)。
|
—ip6
|
指定IPv6地址(示例:2001:db8::44)。
|
— 隔離
|
指定容器隔離技術。
|
— 連結
|
將連結新增到另一個容器。
|
--名稱
|
為容器指定名稱。
|
—oomkilldisable
|
禁用容器的OOM殺手。
|
--pid
|
指定要使用的PID名稱空間。
|
--平台
|
指定平台(實驗;API 1.32+)。
|
— 特權
|
向容器授予擴展許可權。
|
— 運行時
|
指定用於容器的運行時。
|
—storage-opt
|
定義容器的儲存驅動程式選項。
|
—sysctl
|
指定sysctl選項。
|
—tty(-t)
|
分配偽TTY。
|
— 使用者
|
指定要使用的使用者名稱空間。
|
—uts
|
指定要使用的UTS名稱空間。
|
—volume-driver
|
為容器指定可選的卷驅動程式。
|
組態
後續部分介紹如何在Catalyst 9000上配置和部署APP。
附註:瞭解在Catalyst 9000系列交換機上無縫工作的合作夥伴解決方案目錄應用市場
下載Docker映像,並使用SCP、FTP、TFTP或USB儲存將其複製到Cisco交換機:
Cat9k#dir usbflash1:/
Directory of usbflash1:/
17 -rw- 5843233 Jan 23 2025 20:50:01 +00:00 MYAPP.tar
設定網路引數(在本範例中使用的是AppGigabitEthernet介面,即VLAN 10下的192.168.1.10/24,並使用Google解析器):
Cat9k(config)#interface AppGigabitEthernet 1/0/1
Cat9k(config-if)#switchport trunk allowed vlan 10
Cat9k(config-if)#exit
Cat9k(config)#app-hosting appid MYAPP
Cat9k(config-app-hosting)#app-vnic AppGigabitEthernet trunk
Cat9k(config-config-app-hosting-trunk)#vlan 10 guest-interface 0
Cat9k(config-config-app-hosting-vlan-access-ip)#guest-ipaddress 192.168.1.10 netmask 255.255.255.0
Cat9k(config-config-app-hosting-vlan-access-ip)#exit
Cat9k(config-config-app-hosting-trunk)#exit
Cat9k(config-app-hosting)#app-default-gateway 192.168.1.1 guest-interface 0
Cat9k(config-app-hosting)#name-sever 8.8.8.8
Cat9k(config-app-hosting)#exit
在交換器上啟用IOx框架,並等待直到所有服務都在運行:
Cat9k(config)#iox
Cat9k#show iox-service
IOx Infrastructure Summary:
---------------------------
IOx service (CAF) : Running
IOx service (HA) : Running
IOx service (IOxman) : Running
IOx service (Sec storage) : Running
Libvirtd 5.5.0 : Running
Dockerd v19.03.13-ce : Running
Application DB Sync Info : Available
Sync Status : Disable
為特定應用設定所需的Docker運行選項:
Cat9k(config)#app-hosting appid MYAPP
Cat9k(config-app-hosting)#app-resource docker
Cat9k(config-app-hosting-docker)#run-opts 1 ""
Cat9k(config-app-hosting-docker)#run-opts 2 ""
從SSD安裝應用程式並驗證其部署:
Cat9k#app-hosting install appid MYAPP package usbflash1:MYAPP.tar
Installing package 'usbflash1:MYAPP.tar' for 'MYAPP'. Use 'show app-hosting list' for progress.
Cat9k#show app-hosting list
App id State
---------------------------------------------------------
MYAPP DEPLOYED
啟用應用程式並驗證其狀態:
Cat9k#app-hosting activate appid MYAPP
MYAPP activated successfully
Current state is: ACTIVATED
Cat9k#show app-hosting list
App id State
---------------------------------------------------------
MYAPP ACTIVATED
啟動應用程式並驗證其運行狀態:
Cat9k#app-hosting start appid MYAPP
MYAPP started successfully
Current state is: RUNNING
Cat9k#show app-hosting list
App id State
---------------------------------------------------------
MYAPP RUNNING
儲存您的配置更改,以確保這些更改在重新啟動後持續生效:
Cat9k#app-hosting start appid MYAPP
MYAPP started successfully
Current state is: RUNNING
Cat9k#show app-hosting list
App id State
---------------------------------------------------------
MYAPP RUNNING
疑難排解
下表列出了可用於對App Hosting進行故障排除的各種命令:
指令
|
目的
|
show iox-service
|
顯示介面錯誤計數器
|
顯示應用託管清單
|
顯示已安裝的裝置的清單
|
show app-hosting detail appid MYAPP
|
顯示有關裝置的詳細資訊
|
顯示應用託管資源
|
顯示可用資源
|
show app-hosting utilization appid MYAPP
|
顯示有關裝置的利用率資訊
|
應用託管將appid MYAPP日誌移動到bootflash:
|
使用此命令可捕獲應用程式特定的跟蹤日誌(如果存在)。
|
應用託管將系統技術支援移至?
bootflash: 目標路徑 crashinfo-1: 目標路徑 crashinfo: 目標路徑 flash-1: 目標路徑 flash: 目標路徑 韋布伊: 目標路徑
|
使用此命令將系統技術支援移到備用目錄。
|
show app-hosting infra
|
使用此命令檢查是否已啟用簽名驗證。
提示:僅當應用程式宿主使用USB/SSD作為介質時,才能禁用應用程式簽名驗證。
|
應用託管驗證? 禁用應用驗證禁用 啟用應用驗證啟用
|
使用此命令啟用/禁用簽名驗證(形式為CLI許可權模式)。
|
應用託管連線appid MYAPP會話
|
使用此命令可以訪問app console並驗證容器中進程的狀態(在CLI許可權模式下)。
|
修改Docker容器
如果Docker需要修改,請遵循以下步驟:
Cat9k#app-hosting stop appid MYAPP
MYAPP stopped successfully
Current state is: STOPPED
Cat9k#app-hosting deactivate appid MYAPP
MYAPP deactivated successfully
Current state is: DEPLOYED
Cat9k#app-hosting start appid MYAPP
Cat9k(config)#app-hosting appid MYAPP
Cat9k(config-app-hosting)#app-resource docker
Cat9k(config-app-hosting-docker)#prepend-pkg-opts
Cat9k(config-app-hosting-docker)#
Cat9k(config-app-hosting-docker)#exit
Cat9k(config-app-hosting)#exit
Cat9k(config)#exit
Cat9k#app-hosting activate appid MYAPP
MYAPP activated successfully
Current state is: STOPPED
Cat9k#app-hosting start appid MYAPP
MYAPP started successfully
Current state is: RUNNING
相關資訊