主頁 >  其他 > Istio 運維實戰系列(2):讓人頭大的『無頭服務』-上

Istio 運維實戰系列(2):讓人頭大的『無頭服務』-上

2020-09-18 21:59:38 其他

本系列文章將介紹用戶從 Spring Cloud,Dubbo 等傳統微服務框架遷移到 Istio 服務網格時的一些經驗,以及在使用 Istio 程序中可能遇到的一些常見問題的解決方法,

什么是『無頭服務』?

『無頭服務』即 Kubernetes 中的 Headless Service,Service 是 Kubernetes 對后端一組提供相同服務的 Pod 的邏輯抽象和訪問入口,Kubernetes 會根據調度演算法為 Pod 分配一個運行節點,并隨機分配一個 IP 地址;在很多情況下,我們還會對 Pod 進行水平伸縮,啟動多個 Pod 來提供相同的服務,在有多個 Pod 并且 Pod IP 地址不固定的情況下,客戶端很難通過 Pod 的 IP 地址來直接進行訪問,為了解決這個問題,Kubernetes 采用 Service 資源來表示提供相同服務的一組 Pod,

在預設情況下,Kubernetes 會為 Service 分配一個 Cluster IP,不管后端的 Pod IP 如何變化,Service 的 Cluster IP 始終是固定的,因此客戶端可以通過這個 Cluster IP 來訪問這一組 Pod 提供的服務,而無需再關注后端的各個真實的 Pod IP,我們可以將 Service 看做放在一組 Pod 前的一個負載均衡器,而 Cluster IP 就是該負載均衡器的地址,這個負載均衡器會關注后端這組 Pod 的變化,并把發向 Cluster IP 的請求轉發到后端的 Pod 上,(備注:這只是對 Service 的一個簡化描述,如果對 Service 的內部實作感興趣,可以參考這篇文章 如何為服務網格選擇入口網關?)

對于無狀態的應用來說,客戶端并不在意其連接的是哪一個 Pod,采用 Service 是沒有問題的,但在某些特殊情況下,并不能這樣做,例如,如果后端的這一組 Pod 是有狀態的,需要由客戶端根據某種應用相關的演算法來選擇哪一個 Pod 提供服務;或者客戶端需要連接所有的后端 Pod,這時我們就不能在這一組 Pod 前放一個負載均衡器了,這種情況下,我們需要采用 Headless Service,即無頭服務(該命名把多個 Pod 前面的負載均衡器比作服務的頭,很形象是不是?),在定義 Headless Service,我們需要把 Service 的 Cluster IP 顯示設定為 None,這樣 Kubernetes DNS 在決議該 Service 時會直接回傳其后端的多個 Pod IP,而不是 Service 的 Cluster IP,

假設從客戶端訪問一個 Redis 集群,分別采用帶 Cluster IP 的普通 Service 和 Headless Service 進行訪問的程序如下圖所示:

Istio 中『無頭服務』的 mTLS 故障

由于 Headless Service 的特殊性,Istio 中對 Headless Service 的處理和普通 Service 有所不同,在應用遷移到 Isito 的程序中也常常遇到由于 Headless Service 導致的一些問題,下面我們就以一個由于 Headless Service 的 mTLS 故障導致的典型案例進行說明,

故障現象:運維同學反饋從帶 Envoy Sidecar 的 Pod 中訪問 Redis 服務器,但在沒有安裝 Sidecar 的 Pod 中可以正常訪問該 Redis 服務器,

遇到無法進行出向訪問的問題,我們可以首先通過 Envoy 的管理介面來查看 Envoy 的訪問日志,在客戶端 Pod 中運行下面的命令查看 Envoy 日志:

kubectl logs -f redis-client-6d4c6c975f-bm5w6 -c istio-proxy

日志中對 Redis 的訪問記錄如下,其中 UR,URX 是 Response Flag,表示 upstream connection failure,即連接上游失敗,

[2020-09-12T13:38:23.077Z] "- - -" 0 UF,URX "-" "-" 0 0 1001 - "-" "-" "-" "-" "10.1.1.24:6379" outbound|6379||redis.default.svc.cluster.local - 10.1.1.24:6379 10.1.1.25:45940 - -

我們可以通過 Envoy 管理介面匯出其 xDS 配置,以進一步分析其失敗原因,

kubectl exec redis-client-6d4c6c975f-bm5w6 -c istio-proxy curl http://127.0.0.1:15000/config_dump

由于是出向訪問錯誤,因此我們主要關注客戶端中該出向訪問的 Cluster 的配置,在匯出的 xDS 配置中,可以看到 Redis Cluster 的配置,如下面的 yaml 片段所示(為了方便讀者查看,去掉了該 yaml 中一些無關的內容):

{
     "version_info": "2020-09-13T00:33:43Z/5",
     "cluster": {
      "@type": "type.googleapis.com/envoy.api.v2.Cluster",
      "name": "outbound|6379||redis.default.svc.cluster.local",
      "type": "ORIGINAL_DST",
      "connect_timeout": "1s",
      "lb_policy": "CLUSTER_PROVIDED",
      "circuit_breakers": {
        ...
      },

      # mTLS 相關設定
      "transport_socket": {
       "name": "envoy.transport_sockets.tls",
       "typed_config": {
        "@type": "type.googleapis.com/envoy.api.v2.auth.UpstreamTlsContext",
        "common_tls_context": {
         "alpn_protocols": [
          "istio-peer-exchange",
          "istio"
         ],

         # 訪問 Redis 使用的客戶端證書
         "tls_certificate_sds_secret_configs": [
          {
           "name": "default",
           "sds_config": {
            "api_config_source": {
             "api_type": "GRPC",
             "grpc_services": [
              {
                "envoy_grpc": {
                "cluster_name": "sds-grpc"
               }
              }
             ]
            }
           }
          }
         ],

         "combined_validation_context": {
          "default_validation_context": {
           # 用于驗證 Redis 服務器身份的 spiffe indentity
           "verify_subject_alt_name": [
            "spiffe://cluster.local/ns/default/sa/default"
           ]
          },
          # 用于驗證 Redis 服務器的根證書
          "validation_context_sds_secret_config": {
           "name": "ROOTCA",
           "sds_config": {
            "api_config_source": {
             "api_type": "GRPC",
             "grpc_services": [
              {
               "envoy_grpc": {
                "cluster_name": "sds-grpc"
               }
              }
             ]
            }
           }
          }
         }
        },
        "sni": "outbound_.6379_._.redis.default.svc.cluster.local"
       }
      },
      "filters": [
       {
         ...
       }
      ]
     },
     "last_updated": "2020-09-13T00:33:43.862Z"
    }

在 transport_socket 部分的配置中,我們可以看到 Envoy 中配置了訪問 Redis Cluster 的 tls 證書資訊,包括 Envoy Sidecar 用于訪問 Redis 使用的客戶端證書,用于驗證 Redis 服務器證書的根證書,以及采用 spiffe 格式表示的,需驗證的服務器端身份資訊, 這里的證書相關內容是使用 xDS 協議中的 SDS(Secret discovery service) 獲取的,由于篇幅原因在本文中不對此展開進行介紹,如果需要了解 Istio 的證書和 SDS 相關機制,可以參考這篇文章一文帶你徹底厘清 Isito 中的證書作業機制,從上述配置可以得知,當收到 Redis 客戶端發起的請求后,客戶端 Pod 中的 Envoy Sidecar 會使用 mTLS 向 Redis 服務器發起請求,

Redis 客戶端中 Envoy Sidecar 的 mTLS 配置本身看來并沒有什么問題,但我們之前已經得知該 Redis 服務并未安裝 Envoy Sidecar,因此實際上 Redis 服務器端只能接收 plain TCP 請求,這就導致了客戶端 Envoy Sidecar 在向 Redis 服務器創建鏈接時失敗了,

Redis 客戶端以為是這樣的:

但實際上是這樣的:

在服務器端沒有安裝 Envoy Sidecar,不支持 mTLS 的情況下,按理客戶端的 Envoy 不應該采用 mTLS 向服務器端發起連接,這是怎么回事呢?我們對比一下客戶端 Envoy 中的其他 Cluster 中的相關配置,

一個訪問正常的 Cluster 的 mTLS 相關配置如下:

   {
     "version_info": "2020-09-13T00:32:39Z/4",
     "cluster": {
      "@type": "type.googleapis.com/envoy.api.v2.Cluster",
      "name": "outbound|8080||awesome-app.default.svc.cluster.local",
      "type": "EDS",
      "eds_cluster_config": {
       "eds_config": {
        "ads": {}
       },
       "service_name": "outbound|8080||awesome-app.default.svc.cluster.local"
      },
      "connect_timeout": "1s",
      "circuit_breakers": {
       ...
      },
      ...

      # mTLS 相關的配置
      "transport_socket_matches": [
       {
        "name": "tlsMode-istio",
        "match": {
         "tlsMode": "istio"  #對帶有 "tlsMode": "istio" lable 的 endpoint,啟用 mTLS
        },
        "transport_socket": {
         "name": "envoy.transport_sockets.tls",
         "typed_config": {
          "@type": "type.googleapis.com/envoy.api.v2.auth.UpstreamTlsContext",
          "common_tls_context": {
           "alpn_protocols": [
            "istio-peer-exchange",
            "istio",
            "h2"
           ],
           "tls_certificate_sds_secret_configs": [
            {
             "name": "default",
             "sds_config": {
              "api_config_source": {
               "api_type": "GRPC",
               "grpc_services": [
                {
                 "envoy_grpc": {
                  "cluster_name": "sds-grpc"
                 }
                }
               ]
              }
             }
            }
           ],
           "combined_validation_context": {
            "default_validation_context": {},
            "validation_context_sds_secret_config": {
             "name": "ROOTCA",
             "sds_config": {
              "api_config_source": {
               "api_type": "GRPC",
               "grpc_services": [
                {
                 "envoy_grpc": {
                  "cluster_name": "sds-grpc"
                 }
                }
               ]
              }
             }
            }
           }
          },
          "sni": "outbound_.6379_._.redis1.dubbo.svc.cluster.local"
         }
        }
       },
       {
        "name": "tlsMode-disabled",
        "match": {},   # 對所有其他的 enpoint,不啟用 mTLS,使用 plain TCP 進行連接
        "transport_socket": {
         "name": "envoy.transport_sockets.raw_buffer"
        }
       }
      ]
     },
     "last_updated": "2020-09-13T00:32:39.535Z"
    }

從配置中可以看到,一個正常的 Cluster 中有兩部分 mTLS 相關的配置:tlsMode-istio 和 tlsMode-disabled,tlsMode-istio 部分和 Redis Cluster 的配置類似,但包含一個匹配條件(match部分),該條件表示只對帶有 "tlsMode" : "istio" lable 的 endpoint 啟用 mTLS;對于不帶有該標簽的 endpoint 則會采用 tlsMode-disabled 部分的配置,使用 raw_buffer,即 plain TCP 進行連接,

查看 Istio 的相關源代碼,可以得知,當 Istio webhook 向 Pod 中注入 Envoy Sidecar 時,會同時為 Pod 添加一系列 label,其中就包括 "tlsMode" : "istio" 這個 label,如下面的代碼片段所示:

  patchLabels := map[string]string{
		label.TLSMode:                                model.IstioMutualTLSModeLabel,
		model.IstioCanonicalServiceLabelName:         canonicalSvc,
		label.IstioRev:                               revision,
		model.IstioCanonicalServiceRevisionLabelName: canonicalRev,
	}

由于 Pod 在被注入 Envoy Sidecar 的同時被加上了該標簽,客戶端 Enovy Sidecar 在向該 Pod 發起連接時,根據 endpoint 中的標簽匹配到 tlsMode-istio 中的配置,就會采用 mTLS;而如果一個 Pod 沒有被注入 Envoy Sidecar,自然不會有該 Label,因此不能滿足前面配置所示的匹配條件,客戶端的 Envoy Sidecar 會根據 tlsMode-disabled 中的配置,采用 plain TCP 連接該 endpoint,這樣同時兼容了服務器端支持和不支持 mTLS 兩種情況,

下圖展示了 Istio 中是如何通過 endpoint 的標簽來兼容 mTLS 和 plain TCP 兩種情況的,

通過和正常 Cluster 的對比,我們可以看到 Redis Cluster 的配置是有問題的,按理 Redis Cluster 的配置也應該通過 endpoint 的 tlsMode 標簽進行判斷,以決定客戶端的 Envoy Sidecar 是通過 mTLS 還是 plain TCP 發起和 Redis 服務器的連接,但實際情況是 Redis Cluster 中只有 mTLS 的配置,導致了前面我們看到的連接失敗故障,

Redis 是一個 Headless Service,通過在社區查找相關資料,發現 Istio 1.6 版本前對 Headless Service 的處理有問題,導致了該故障,參見這個 Issue Istio 1.5 prevents all connection attempts to Redis (headless) service #21964,

解決方案

找到了故障原因后,要解決這個問題就很簡單了,我們可以通過一個 Destination Rule 禁用 Redis Service 的 mTLS,如下面的 yaml 片段所示:

kind: DestinationRule
metadata:
  name: redis-disable-mtls
spec:
  host: redis.default.svc.cluster.local
  trafficPolicy:
    tls:
      mode: DISABLE 

再查看客戶端 Envoy 中的 Redis Cluster 配置,可以看到 mTLS 已經被禁用,Cluster 中不再有 mTLS 相關的證書配置,

    {
     "version_info": "2020-09-13T09:02:28Z/7",
     "cluster": {
      "@type": "type.googleapis.com/envoy.api.v2.Cluster",
      "name": "outbound|6379||redis.dubbo.svc.cluster.local",
      "type": "ORIGINAL_DST",
      "connect_timeout": "1s",
      "lb_policy": "CLUSTER_PROVIDED",
      "circuit_breakers": {
        ...
      },
      "metadata": {
       "filter_metadata": {
        "istio": {
         "config": "/apis/networking.istio.io/v1alpha3/namespaces/dubbo/destination-rule/redis-disable-mtls"
        }
       }
      },
      "filters": [
       {
        "name": "envoy.filters.network.upstream.metadata_exchange",
        "typed_config": {
         "@type": "type.googleapis.com/udpa.type.v1.TypedStruct",
         "type_url": "type.googleapis.com/envoy.tcp.metadataexchange.config.MetadataExchange",
         "value": {
          "protocol": "istio-peer-exchange"
         }
        }
       }
      ]
     },
     "last_updated": "2020-09-13T09:02:28.514Z"
    }

此時再嘗試從客戶端訪問 Redis 服務器,一切正常!

小結

Headless Service 是 Kubernetes 中一種沒有 Cluster IP 的特殊 Service,Istio 中對 Headless Service 的處理流程和普通 Service 有所不同,由于 Headless Service 的特殊性,我們在將應用遷移到 Istio 的程序中常常會遇到與此相關的問題,

這次我們遇到的問題是由于 Istio 1.6 之前的版本,對 Headless Service 處理的一個 Bug 導致無法連接到 Headless Service,該問題是一個高頻故障,我們已經遇到過多次,可以通過創建 Destination Rule 禁用 Headless Service 的 mTLS 來規避該問題,該故障在1.6版本中已經修復,建議盡快升級到 1.6 版本,以徹底解決本問題,也可以直接采用騰訊云上的云原生 Service Mesh 服務 TCM(Tencent Cloud Mesh),為微服務應用快速引入 Service Mesh 的流量管理和服務治理能力,而無需再關注 Service Mesh 基礎設施自身的安裝、維護、升級等事項,

Headless Service 的坑較多,除了這一個故障以外,我們還在遷移程序中遇到了其他一些關于 Headless Service 的問題,在后續文章中再繼續和大家分享,

附錄

  • 如何為服務網格選擇入口網關?
  • Understanding Envoy Proxy HTTP Access Logs
  • 一文帶你徹底厘清 Isito 中的證書作業機制
  • Istio 運維實戰系列(1):應用容器對 Envoy Sidecar 的啟動依賴問題

【騰訊云原生】云說新品、云研新術、云游新活、云賞資訊,掃碼關注同名公眾號,及時獲取更多干貨!!

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/76782.html

標籤:其他

上一篇:Azure Cosmos DB介紹及演示

下一篇:用對比學習訓練說話人初步驗證模型

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more