主頁 >  其他 > 開源函式計算平臺 OpenFunction 保姆級入門教程

開源函式計算平臺 OpenFunction 保姆級入門教程

2022-04-03 07:37:44 其他

OpenFunction 0.6.0 上周已經正式發布了,帶來了許多值得注意的功能,包括函式插件、函式的分布式跟蹤、控制自動縮放、HTTP 函式觸發異步函式等,同時,異步運行時定義也被重構了,核心 API 也已經從 v1alpha1 升級到 v1beta1,

官宣鏈接??:https://openfunction.dev/blog/2022/03/25/announcing-openfunction-0.6.0-faas-observability-http-trigger-and-more/

近年來,隨著無服務器計算的興起,出現了很多非常優秀的 Serverless 開源專案,其中比較杰出的有 Knative 和 OpenFaaS,但 Knative Serving 僅僅能運行應用,還不能運行函式,而 Serverless 的核心是函式計算,也就是 FaaS,因此比較遺憾;OpenFaaS 雖然很早就出圈了,但技術堆疊過于老舊,不能滿足現代化函式計算平臺的需求,

OpenFunction 便是這樣一個現代化的云原生 FaaS(函式即服務)框架,它引入了很多非常優秀的開源技術堆疊,包括 Knative、Tekton、Shipwright、Dapr、KEDA 等,這些技術堆疊為打造新一代開源函式計算平臺提供了無限可能:

  • Shipwright 可以在函式構建的程序中讓用戶自由選擇和切換鏡像構建的工具,并對其進行抽象,提供了統一的 API;
  • Knative 提供了優秀的同步函式運行時,具有強大的自動伸縮能力;
  • KEDA 可以基于更多型別的指標來自動伸縮,更加靈活;
  • Dapr 可以將不同應用的通用能力進行抽象,減輕開發分布式應用的作業量,

本文不打算講一些非常高深的理論,作為剛跨進 Serverless 門檻的用戶,更需要的是如何快速上手,以便對函式計算有一個感性的認知,在后續使用的程序中,咱們再慢慢理解其中的架構和設計,

本文將會帶領大家快速部署和上手 OpenFunction,并通過一個 demo 來體驗同步函式是如何運作的,

OpenFunction CLI 介紹

OpenFunction 從 0.5 版本開始使用全新的命令列工具 ofn 來安裝各個依賴組件,它的功能更加全面,支持一鍵部署、一鍵卸載以及 Demo 演示的功能,用戶可以通過設定相應的引數自定義地選擇安裝各個組件,同時可以選擇特定的版本,使安裝更為靈活,安裝行程也提供了實時展示,使得界面更為美觀,它支持的組件和其依賴的 Kubernetes 版本如下:

Components Kubernetes 1.17 Kubernetes 1.18 Kubernetes 1.19 Kubernetes 1.20+
Knative Serving 0.21.1 0.23.3 0.25.2 1.0.1
Kourier 0.21.0 0.23.0 0.25.0 1.0.1
Serving Default Domain 0.21.0 0.23.0 0.25.0 1.0.1
Dapr 1.5.1 1.5.1 1.5.1 1.5.1
Keda 2.4.0 2.4.0 2.4.0 2.4.0
Shipwright 0.6.1 0.6.1 0.6.1 0.6.1
Tekton Pipelines 0.23.0 0.26.0 0.29.0 0.30.0
Cert Manager 1.5.4 1.5.4 1.5.4 1.5.4
Ingress Nginx na na 1.1.0 1.1.0
表一 OpenFunction 使用的第三方組件依賴的 Kubernetes 版本

ofn 的安裝引數 `ofn install` 解決了 OpenFunction 和 Kubernetes 的兼容問題,會自動根據 Kubernetes 版本選擇兼容組件進行安裝,同時提供多種引數以供用戶選擇,
引數 功能
--all 用于安裝 OpenFunction 及其所有依賴,
--async 用于安裝 OpenFunction 的異步運行時(Dapr & Keda),
--cert-manager * 用于安裝 Cert Manager,
--dapr * 用于安裝 Dapr,
--dry-run 用于提示當前命令所要安裝的組件及其版本,
--ingress * 用于安裝 Ingress Nginx,
--keda * 用于安裝 Keda,
--knative 用于安裝 Knative Serving(以Kourier為默認網關)
--region-cn 針對訪問 gcr.io 或 github.com 受限的用戶,
--shipwright * 用于安裝 ShipWright,
--sync 用于安裝 OpenFunction Sync Runtime(待支持),
--upgrade 在安裝時將組件升級到目標版本,
--verbose 顯示粗略資訊,
--version 用于指定要安裝的 OpenFunction 的版本,(默認為 "v0.6.0")
--timeout 設定超時時間,默認為5分鐘,
表二 install 命令引數串列

使用 OpenFunction CLI 部署 OpenFunction

有了命令列工具 ofn 之后,OpenFunction 部署起來非常簡單,首先需要安裝 ofn,以 amd64 版本的 Linux 為例,僅需兩步即可:

1、下載 ofn

$ wget -c  https://github.com/OpenFunction/cli/releases/download/v0.5.1/ofn_linux_amd64.tar.gz -O - | tar -xz

2、為 ofn 賦予權限并移動到 /usr/local/bin/ 檔案夾下,

$ chmod +x ofn && mv ofn /usr/local/bin/

安裝好 ofn 之后,僅需一步即可完成 OpenFunction 的安裝,雖然使用 --all 選項可以安裝所有組件,但我知道大部分小伙伴的真實需求是不想再額外裝一下 Ingress Controller 的,這個也好辦,我們可以直接指定需要安裝的組件,排除 ingress,命令如下:

$ ofn install --knative --async --shipwright --cert-manager --region-cn
Start installing OpenFunction and its dependencies.
The following components will be installed:
+------------------+---------+
| COMPONENT        | VERSION |
+------------------+---------+
| OpenFunction     | 0.6.0   |
| Keda             | 2.4.0   |
| Dapr             | 1.5.1   |
| Shipwright       | 0.6.1   |
| CertManager      | 1.5.4   |
| Kourier          | 1.0.1   |
| DefaultDomain    | 1.0.1   |
| Knative Serving  | 1.0.1   |
| Tekton Pipelines | 0.30.0  |
+------------------+---------+
 ? Dapr - Completed!
 ? Keda - Completed!
 ? Knative Serving - Completed!
 ? Shipwright - Completed!
 ? Cert Manager - Completed!
 ? OpenFunction - Completed!
?? Completed in 2m47.901328069s.

 ██████╗ ██████╗ ███████╗███╗   ██╗
██╔═══██╗██╔══██╗██╔════╝████╗  ██║
██║   ██║██████╔╝█████╗  ██╔██╗ ██║
██║   ██║██╔═══╝ ██╔══╝  ██║╚██╗██║
╚██████╔╝██║     ███████╗██║ ╚████║
 ╚═════╝ ╚═╝     ╚══════╝╚═╝  ╚═══╝

███████╗██╗   ██╗███╗   ██╗ ██████╗████████╗██╗ ██████╗ ███╗   ██╗
██╔════╝██║   ██║████╗  ██║██╔════╝╚══██╔══╝██║██╔═══██╗████╗  ██║
█████╗  ██║   ██║██╔██╗ ██║██║        ██║   ██║██║   ██║██╔██╗ ██║
██╔══╝  ██║   ██║██║╚██╗██║██║        ██║   ██║██║   ██║██║╚██╗██║
██║     ╚██████╔╝██║ ╚████║╚██████╗   ██║   ██║╚██████╔╝██║ ╚████║
╚═╝      ╚═════╝ ╚═╝  ╚═══╝ ╚═════╝   ╚═╝   ╚═╝ ╚═════╝ ╚═╝  ╚═══╝

雖然本文演示的是同步函式,但這里把異步運行時也裝上了,如果你不需要,可以把 --async 這個引數去掉,不影響本文的實驗,

安裝完成后,會創建這幾個 namespace:

$ kubectl get ns
NAME                              STATUS   AGE
cert-manager                      Active   17m
dapr-system                       Active   4m34s
io                                Active   3m31s
keda                              Active   4m49s
knative-serving                   Active   4m41s
kourier-system                    Active   3m57s
openfunction                      Active   3m37s
shipwright-build                  Active   4m26s
tekton-pipelines                  Active   4m50s

每個 namespace 對應上面安裝的各個組件,目前 OpenFunction 的 Webhook 需要使用 CertManager 來驗證 API 訪問,后續我們會去掉這個依賴,不再需要安裝 CertManager

自定義域名后綴

Knative Serving 目前使用 Kourier 作為入口網關,由于我們沒有部署 Ingress Controller,所以我們訪問函式只有 Kourier 這一個入口,

Kourier 是一個基于 Envoy Proxy 的輕量級網關,是專門對于 Knative Serving 服務訪問提供的一個網關實作,關于 Envoy 控制平面的細節本文不作贅述,感興趣的可以去閱讀 Kourier 官方檔案和原始碼,這里我們只需要知道 Kourier 會為函式訪問提供一個入口,這個訪問入口是通過域名來提供的,我們要做的作業就是將相關域名決議到 Kourier 的 ClusterIP,

Kourier 默認創建了兩個 Service:

$ kubectl -n kourier-system get svc
NAME               TYPE           CLUSTER-IP     EXTERNAL-IP   PORT(S)                      AGE
kourier            LoadBalancer   10.233.7.202   <pending>     80:31655/TCP,443:30980/TCP   36m
kourier-internal   ClusterIP      10.233.47.71   <none>        80/TCP                       36m

只需要將與函式訪問相關域名決議到 10.233.47.71 即可,

雖然每個函式的域名都是不同的,但域名后綴是一樣的,可以通過泛域名決議來實作決議與函式相關的所有域名,Kourier 默認的域名后綴是 example.com,通過 Knative 的 ConfigMap config-domain 來配置:

$ kubectl -n knative-serving get cm config-domain -o yaml
apiVersion: v1
data:
  _example: |
    ################################
    #                              #
    #    EXAMPLE CONFIGURATION     #
    #                              #
    ################################

    # This block is not actually functional configuration,
    # but serves to illustrate the available configuration
    # options and document them in a way that is accessible
    # to users that `kubectl edit` this config map.
    #
    # These sample configuration options may be copied out of
    # this example block and unindented to be in the data block
    # to actually change the configuration.

    # Default value for domain.
    # Although it will match all routes, it is the least-specific rule so it
    # will only be used if no other domain matches.
    example.com: |

    # These are example settings of domain.
    # example.org will be used for routes having app=nonprofit.
    example.org: |
      selector:
        app: nonprofit

    # Routes having the cluster domain suffix (by default 'svc.cluster.local')
    # will not be exposed through Ingress. You can define your own label
    # selector to assign that domain suffix to your Route here, or you can set
    # the label
    #    "networking.knative.dev/visibility=cluster-local"
    # to achieve the same effect.  This shows how to make routes having
    # the label app=secret only exposed to the local cluster.
    svc.cluster.local: |
      selector:
        app: secret
kind: ConfigMap
metadata:
  annotations:
    knative.dev/example-checksum: 81552d0b
  labels:
    app.kubernetes.io/part-of: knative-serving
    app.kubernetes.io/version: 1.0.1
    serving.knative.dev/release: v1.0.1
  name: config-domain
  namespace: knative-serving

將其中的 _example 物件洗掉,添加一個默認域名(例如 openfunction.dev),最終修改結果如下:

$ kubectl -n knative-serving get cm config-domain -o yaml
apiVersion: v1
data:
  openfunction.dev: ""
kind: ConfigMap
metadata:
  annotations:
    knative.dev/example-checksum: 81552d0b
  labels:
    app.kubernetes.io/part-of: knative-serving
    app.kubernetes.io/version: 1.0.1
    serving.knative.dev/release: v1.0.1
  name: config-domain
  namespace: knative-serving

配置集群域名決議

為了便于在 Kubernetes 的 Pod 中訪問函式,可以對 Kubernetes 集群的 CoreDNS 進行改造,使其能夠對域名后綴 openfunction.dev 進行泛決議,需要在 CoreDNS 的配置中添加一段內容:

        template IN A openfunction.dev {
          match .*\.openfunction\.dev
          answer "{{ .Name }} 60 IN A 10.233.47.71"
          fallthrough
        }

修改完成后的 CoreDNS 配置如下:

$ kubectl -n kube-system get cm coredns -o yaml
apiVersion: v1
data:
  Corefile: |
    .:53 {
        errors
        health
        ready
        template IN A openfunction.dev {
          match .*\.openfunction\.dev
          answer "{{ .Name }} 60 IN A 10.233.47.71"
          fallthrough
        }
        kubernetes cluster.local in-addr.arpa ip6.arpa {
          pods insecure
          fallthrough in-addr.arpa ip6.arpa
        }
        hosts /etc/coredns/NodeHosts {
          ttl 60
          reload 15s
          fallthrough
        }
        prometheus :9153
        forward . /etc/resolv.conf
        cache 30
        loop
        reload
        loadbalance
    }
    ...

同步函式 demo 示例

配置完域名決議后,接下來可以運行一個同步函式的示例來驗證一下,OpenFunction 官方倉庫提供了多種語言的同步函式示例:

這里我們選擇 Go 語言的函式示例,先來看一下最核心的部署清單:

# function-sample.yaml
apiVersion: core.openfunction.io/v1beta1
kind: Function
metadata:
  name: function-sample
spec:
  version: "v2.0.0"
  image: "openfunctiondev/sample-go-func:latest"
  imageCredentials:
    name: push-secret
  port: 8080 # default to 8080
  build:
    builder: openfunction/builder-go:latest
    env:
      FUNC_NAME: "HelloWorld"
      FUNC_CLEAR_SOURCE: "true"
    srcRepo:
      url: "https://github.com/OpenFunction/samples.git"
      sourceSubPath: "functions/knative/hello-world-go"
      revision: "main"
  serving:
    template:
      containers:
        - name: function
          imagePullPolicy: Always
    runtime: "knative"

Function 是由 CRD 定義的一個 CR,用來將函式轉換為最終運行的應用,這個例子里面包含了兩個組件:

  • build : 通過 Shipwright 選擇不同的鏡像構建工具,最終將應用構建為容器鏡像;
  • Serving : 通過 Serving CRD 將應用部署到不同的運行時中,可以選擇同步運行時或異步運行時,這里選擇的是同步運行時 knative,

國內環境由于不可抗因素,可以通過 GOPROXY 從公共代理鏡像中快速拉取所需的依賴代碼,只需在部署清單中的 build 階段添加一個環境變數 FUNC_GOPROXY 即可:

# function-sample.yaml
apiVersion: core.openfunction.io/v1beta1
kind: Function
metadata:
  name: function-sample
spec:
  version: "v2.0.0"
  image: "openfunctiondev/sample-go-func:latest"
  imageCredentials:
    name: push-secret
  port: 8080 # default to 8080
  build:
    builder: openfunction/builder-go:latest
    env:
      FUNC_NAME: "HelloWorld"
      FUNC_CLEAR_SOURCE: "true"
      FUNC_GOPROXY: "https://proxy.golang.com.cn,direct"
    srcRepo:
      url: "https://github.com/OpenFunction/samples.git"
      sourceSubPath: "functions/knative/hello-world-go"
      revision: "main"
  serving:
    template:
      containers:
        - name: function
          imagePullPolicy: Always
    runtime: "knative"

在創建函式之前,需要先創建一個 secret 來存盤 Docker Hub 的用戶名和密碼:

$ REGISTRY_SERVER=https://index.docker.io/v1/ REGISTRY_USER=<your_registry_user> REGISTRY_PASSWORD=<your_registry_password>
$ kubectl create secret docker-registry push-secret \
    --docker-server=$REGISTRY_SERVER \
    --docker-username=$REGISTRY_USER \
    --docker-password=$REGISTRY_PASSWORD

下面通過 kubectl 創建這個 Function:

$ kubectl apply -f function-sample.yaml

查看 Function 運行狀況:

$ kubectl get function
NAME              BUILDSTATE   SERVINGSTATE   BUILDER         SERVING   URL   AGE
function-sample   Building                    builder-6ht76                   5s

目前正處于 Build 階段,builder 的名稱是 builder-6ht76,查看 builder 的運行狀態:

$ kubectl get builder
NAME            PHASE   STATE      REASON   AGE
builder-6ht76   Build   Building            50s

這個 builder 會啟動一個 Pod 來構建鏡像:

$ kubectl get pod
NAME                                     READY   STATUS     RESTARTS   AGE
builder-6ht76-buildrun-jvtwk-vjlgt-pod   2/4     NotReady   0          2m11s

這個 Pod 中包含了 4 個容器:

  • step-source-default : 拉取源代碼;

  • step-prepare : 設定環境變數;

  • step-create : 構建鏡像;

  • step-results : 輸出鏡像的 digest,

再次查看函式狀態:

$ kubectl get function
NAME              BUILDSTATE   SERVINGSTATE   BUILDER         SERVING         URL                                              AGE
function-sample   Succeeded    Running        builder-6ht76   serving-6w4rn   http://openfunction.io/default/function-sample   6m

已經由之前的 Building 狀態變成了 Runing 狀態,

這里的 URL 我們無法直接訪問,因為沒有部署 Ingress Controller,不過我們可以通過其他方式來訪問,Kourier 把每個訪問入口抽象為一個 CR 叫 ksvc,每一個 ksvc 對應一個函式的訪問入口,可以看下目前有沒有創建 ksvc:

$ kubectl get ksvc
NAME                       URL                                                        LATESTCREATED                   LATESTREADY                     READY   REASON
serving-6w4rn-ksvc-k4x29   http://serving-6w4rn-ksvc-k4x29.default.openfunction.dev   serving-6w4rn-ksvc-k4x29-v200   serving-6w4rn-ksvc-k4x29-v200   True

函式的訪問入口就是 http://serving-6w4rn-ksvc-k4x29.default.openfunction.dev,由于在前面的章節中已經配置好了域名決議,這里可以啟動一個 Pod 來直接訪問該域名:

$ kubectl run curl --image=radial/busyboxplus:curl -i --tty
If you don't see a command prompt, try pressing enter.
[ root@curl:/ ]$
[ root@curl:/ ]$ curl http://serving-6w4rn-ksvc-k4x29.default.openfunction.dev/default/function-sample/World
Hello, default/function-sample/World!
[ root@curl:/ ]$ curl http://serving-6w4rn-ksvc-k4x29.default.openfunction.dev/default/function-sample/OpenFunction
Hello, default/function-sample/OpenFunction!

訪問這個函式時會自動觸發運行一個 Pod:

$ kubectl get pod
NAME                                                       READY   STATUS    RESTARTS   AGE
serving-6w4rn-ksvc-k4x29-v200-deployment-688d58bfb-6fvcg   2/2     Running   0          7s

這個 Pod 使用的鏡像就是之前 build 階段構建的鏡像,事實上這個 Pod 是由 Deployment 控制的,在沒有流量時,這個 Deployment 的副本數是 0,當有新的流量進入時,會先進入 Knative 的 Activator,Activator 接收到流量后會通知 Autoscaler(自動伸縮控制器),然后 Autoscaler 將 Deployment 的副本數擴展到 1,最后 Activator 會將流量轉發到實際的 Pod 中,從而實作服務呼叫,這個程序也叫冷啟動

如果你不再訪問這個入口,過一段時間之后,Deployment 的副本數就會被收縮為 0:

$ kubectl get deploy
NAME                                       READY   UP-TO-DATE   AVAILABLE   AGE
serving-6w4rn-ksvc-k4x29-v200-deployment   0/0     0            0           22m

總結

通過本文的示例,相信大家應該能夠體會到一些函式計算的優勢,它為我們帶來了我們所期望的對業務場景快速拆解重構的能力,作為用戶,只需要專注于他們的開發意圖,撰寫函式代碼,并上傳到代碼倉庫,其他的東西不需要關心,不需要了解基礎設施,甚至不需要知道容器和 Kubernetes 的存在,函式計算平臺會自動為您分配好計算資源,并彈性地運行任務,只有當您需要訪問的時候,才會通過擴容來運行任務,其他時間并不會消耗計算資源,

本文由博客一文多發平臺 OpenWrite 發布!

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

標籤:其他

上一篇:SQL創建一個新列而不是新行

下一篇:硬核除錯實操 | 手把手帶你實作 Serverless 斷點除錯

標籤雲
其他(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