Nginx、OpenResty和Kong的基本概念與使用方法

Nginx、OpenResty和Kong的基本概念與使用方法

版權聲明:本文爲博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處連接和本聲明。
本文連接: https://blog.csdn.net/lijiaocn/article/details/83004672

做者: 李佶澳   轉載請保留:原文地址   發佈時間:2018-09-29 15:41:50 +0800css

 

 

說明

NginxOpenRestryKong這三個項目緊密相連: Nginx是模塊化設計的反向代理軟件,C語言開發; OpenResty是以Nginx爲核心的Web開發平臺,能夠解析執行Lua腳本(OpenResty與Lua的關係,相似於Jvm與Java,不過Java能夠作的事情太多了,OpenResty主要用來作Web、API等); Kong是一個OpenResty應用,是一個api gateway,具備API管理和請求代理的功能。html

Nginx

Nginx是HTTP Server、反向代理服務器、郵件代理服務器、通用的TCP/UDP代理服務器。nginx features詳細列出了nginx的功能特性。nginx

Nginx配置文件,指令與變量

Nginx的配置文件由單指令(simple directive)塊指令(block directive)組成,單指令只有一行,以「;」結尾,塊指令後面是用「{ }」包裹的多行內容。git

有些塊指令後的花括號中能夠繼續包含單指令,這樣的塊指令被成爲配置上下文(context),這樣的指令有:events、http、server、location等。github

context是嵌套的,最外層的context是main context,配置文件中不在{}的中指令都是位於main context中。web

events和http指令位於main context,server位於http context,location位於server context:正則表達式

  1.  
    main context
  2.  
    - events
  3.  
    - http
  4.  
    - server
  5.  
    - location

配置文件示例見: Beginner’s Guide,例如:sql

  1.  
    http {
  2.  
    server {
  3.  
    listen 8080; # server監聽端口,不指定默認80
  4.  
    root /data/up1; # 默認文件查找根目錄
  5.  
     
  6.  
    # 將請求按照uri進行分組處理
  7.  
    location / { # 選擇最常匹配的location,若是不匹配任何location,返回404
  8.  
    root /data/www; # 文件查找根目錄,覆蓋server中的root配置
  9.  
    }
  10.  
     
  11.  
    # uri路徑匹配,優先級低於下面的正則匹配!
  12.  
    location /images/ {
  13.  
    root /data;
  14.  
    }
  15.  
     
  16.  
    # 使用正則表達式匹配(必須帶有"~ "前綴):匹配文件後綴名
  17.  
    location ~ \.(gif|jpg|png)$ { # 優先級高於uri路徑匹配
  18.  
    root /data/images;
  19.  
    }
  20.  
     
  21.  
    # 做爲代理服務器的配置方法
  22.  
    location /proxy/ { # 將uri匹配的請求轉發到proxy_pass指定的地址
  23.  
    proxy_pass http: //IP地址:8080;
  24.  
    }
  25.  
     
  26.  
    # 將請求代理到FastCGI
  27.  
    # fastcgi_param是按照FastCGI的要求傳遞的參數,能夠有多個,後面的`$XXX`是Nginx變量,拼成了參數的值
  28.  
    location /fastcgi/ {
  29.  
    fastcgi_pass localhost: 9000; # fastCGI服務的地址
  30.  
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; # 傳給fastCGI服務的參數: SCRIPT_FILENAME
  31.  
    fastcgi_param QUERY_STRING $query_string; # 傳給fastCGI服務的參數: QUERY_STRING
  32.  
    }
  33.  
    }
  34.  
    }

上面的例子中的proxy_passfactcgi_pass分別是nginx的http proxy modulehttp fastcgi moudle中指令。docker

Nginx有不少的module,在Nginx Documents中能夠查看每一個modules的用法。數據庫

Nginx: Alphabetical index of directives中列出了Nginx的全部指令。

Nginx: Alphabetical index of variables中列出了能夠在配置文件中使用的全部變量。

在查看Nginx指令用法的時候,注意指令的context:

  1.  
    Syntax: gzip on | off;
  2.  
    Default: gzip off;
  3.  
    Context: http, server, location, if in location # 可使用gzip指令的地方

Nginx做爲TCP/UDP負載均衡器

Nginx本來只能作7層(http)代理,在1.9.0版本中增長了4層(TCP/UDP)代理功能。

4層代理功能在Nginx的ngx_stream_core_module模塊中實現,但默認沒有編譯,須要在編譯時指定: –with-stream。

使用配置以下:

  1.  
    worker_processes auto;
  2.  
     
  3.  
    error_log /var/ log/nginx/error.log info;
  4.  
     
  5.  
    events {
  6.  
    worker_connections 1024;
  7.  
    }
  8.  
     
  9.  
    stream {
  10.  
    upstream backend {
  11.  
    hash $remote_addr consistent;
  12.  
     
  13.  
    server backend1.example.com:12345 weight=5;
  14.  
    server 127.0.0.1:12345 max_fails=3 fail_timeout=30s;
  15.  
    server unix:/tmp/backend3;
  16.  
    }
  17.  
     
  18.  
    upstream dns {
  19.  
    server 192.168.0.1:53535;
  20.  
    server dns.example.com:53;
  21.  
    }
  22.  
     
  23.  
    server {
  24.  
    listen 12345;
  25.  
    proxy_connect_timeout 1s;
  26.  
    proxy_timeout 3s;
  27.  
    proxy_pass backend;
  28.  
    }
  29.  
     
  30.  
    server {
  31.  
    listen 127.0.0.1:53 udp reuseport;
  32.  
    proxy_timeout 20s;
  33.  
    proxy_pass dns;
  34.  
    }
  35.  
     
  36.  
    server {
  37.  
    listen [:: 1]:12345;
  38.  
    proxy_pass unix:/tmp/stream.socket;
  39.  
    }
  40.  
    }

Nginx模塊

理解Nginx Module很重要,由於後面的OpenResty就是標準的Nginx加上不少Nginx Module。

Nginx是用C語言開發軟件,採用模塊化設計,能夠經過開發模塊擴展Nginx的功能。

Nginx Development guide中介紹了Nginx模塊開發的方法Nginx Module develop

插件能夠編譯成.so之後動態加載,也能夠直接編譯到nginx中,編譯是經過--add-module指定要集成的模塊。

例如lua-nginx-module

  1.  
    ./configure --prefix= /opt/nginx \
  2.  
    -- with-ld-opt="-Wl,-rpath,/path/to/luajit-or-lua/lib" \
  3.  
    --add- module=/path/to/ngx_devel_kit \
  4.  
    --add- module=/path/to/lua-nginx-module

OpenResty

OpenResty是一個集成了Nginx、LuaJIT和其它不少moudels的平臺,用來託管完整的web應用——包含業務邏輯,而不單純是靜態文件服務器: OpenResty® aims to run your server-side web app completely in the Nginx server, leveraging Nginx’s event model to do non-blocking I/O not only with the HTTP clients, but also with remote backends like MySQL, PostgreSQL, Memcached, and Redis.

OpenResty Components中列出了OpenResty集成的組件,數量很多,這裏就不列出來了。

先經過OpenResty Getting Started感覺一下OpenResty是咋回事。

OpenResty安裝

Centos安裝方式:

  1.  
    sudo yum install yum-utils
  2.  
    sudo yum-config-manager --add-repo https://openresty.org/package/centos/openresty.repo
  3.  
    sudo yum install openresty
  4.  
    sudo yum install openresty-resty

經過源代碼編譯:

  1.  
    wget https: //openresty.org/download/openresty-1.13.6.2.tar.gz
  2.  
    tar -xvf openresty -1.13.6.2.tar.gz
  3.  
    cd openresty -1.13.6.2/
  4.  
    ./configure -- with-pcre-jit --with-http_ssl_module --with-http_realip_module --with-http_stub_status_module --with-http_v2_module
  5.  
    make -j2
  6.  
    make install //默認安裝在/usr/local/bin/openresty
  7.  
    export PATH=/usr/local/openresty/bin:$PATH

爲了後面順利的使用kong,configure時要指定kong依賴的模塊。

都包含如下文件:

  1.  
    $ tree -L 2 /usr/local/openresty/
  2.  
    /usr/local/openresty/
  3.  
    | -- bin
  4.  
    | | -- md2pod.pl
  5.  
    | | -- nginx-xml2pod
  6.  
    | | -- openresty -> /usr/local/openresty/nginx/sbin/nginx
  7.  
    | | -- opm
  8.  
    | | -- resty
  9.  
    | | -- restydoc
  10.  
    | ` -- restydoc-index
  11.  
    | -- COPYRIGHT
  12.  
    | -- luajit
  13.  
    | | -- bin
  14.  
    | | -- include
  15.  
    | | -- lib
  16.  
    | ` -- share
  17.  
    ...

注意openresty命令就是nginx命令,OpenResty能夠理解爲一個集成了不少模塊的定製版nginx:

  1.  
    $ openresty -h
  2.  
    nginx version: openresty/1.13.6.2
  3.  
    Usage: nginx [-?hvVtTq] [-s signal] [-c filename] [-p prefix] [-g directives]
  4.  
     
  5.  
    Options:
  6.  
    -?,-h : this help
  7.  
    -v : show version and exit
  8.  
    -V : show version and configure options then exit
  9.  
    -t : test configuration and exit
  10.  
    -T : test configuration, dump it and exit
  11.  
    -q : suppress non- error messages during configuration testing
  12.  
    -s signal : send signal to a master process: stop, quit, reopen, reload
  13.  
    -p prefix : set prefix path (default: /usr/local/openresty/nginx/)
  14.  
    -c filename : set configuration file (default: conf/nginx.conf)
  15.  
    -g directives : set global directives out of configuration file

能夠在openresty的配置文件中寫入lua代碼:

  1.  
    $ cat nginx.conf
  2.  
    worker_processes 1;
  3.  
    error_log logs/ error.log;
  4.  
    events {
  5.  
    worker_connections 1024;
  6.  
    }
  7.  
    http {
  8.  
    server {
  9.  
    listen 8080;
  10.  
    location / {
  11.  
    default_type text/html;
  12.  
    content_by_lua '
  13.  
    ngx.say( "<p>hello, world</p>")
  14.  
    ';
  15.  
    }
  16.  
    }
  17.  
    }

啓動:

openresty -p `pwd` -c nginx.conf 

而後訪問」127.0.0.1:8080」,能夠看到輸出:

  1.  
    $ curl 127.0.0.1:8080
  2.  
    <p>hello, world</p>

Kong

Kong是一個OpenResty應用,用來管理api。

Kong編譯安裝

Kong編譯安裝時須要先安裝有OpenResty。

還須要lua包管理工具luarocks:

  1.  
    git clone git: //github.com/luarocks/luarocks.git
  2.  
    ./configure --lua-suffix=jit -- with-lua=/usr/local/openresty/luajit --with-lua-include=/usr/local/openresty/luajit/include/luajit-2.1
  3.  
    make install

下載kong代碼編譯:

  1.  
    git clone https: //github.com/Kong/kong.git
  2.  
    cd kong
  3.  
    make install

編譯完成以後會在當前目錄生成一個bin目錄:

  1.  
    $ ls bin/
  2.  
    busted kong

查看bin/kong的內容,能夠發現這是一個用resty執行的腳本文件:

  1.  
    $ cat bin/kong
  2.  
    #!/usr/bin/env resty
  3.  
     
  4.  
    require "luarocks.loader"
  5.  
     
  6.  
    package.path = "./?.lua;./?/init.lua;" .. package.path
  7.  
     
  8.  
    require("kong.cmd.init")(arg)

啓動Kong

先準備數據庫,kong支持PostgreSQL和Cassandra 3.x.x,這裏使用PostgreSQL(須要版本在9.4及以上):

注意,若是使用其它版本的PostgreSQL,將下面的9.6換成對應版本號。

  1.  
    yum install https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-7-x86_64/pgdg-centos96-9.6-3.noarch.rpm
  2.  
    yum install postgresql96
  3.  
    yum install postgresql96-server
  4.  
    export PATH=$PATH:/usr/pgsql-9.6/bin/
  5.  
    postgresql96-setup initdb
  6.  
    systemctl start postgresql-9.6
  7.  
    su - postgres
  8.  
    psql
  9.  
    CREATE USER kong; CREATE DATABASE kong OWNER kong;
  10.  
    alter user kong with encrypted password '123456';
  11.  
    \q

在/var/lib/pgsql/9.6/data/pg_hba.conf的開始處添加規則下面規則:

host    kong            kong            127.0.0.1/32            md5

而後重啓PostgreSQL,確保下面的命令能登錄PostgreSQL:

  1.  
    # psql -h 127.0.0.1 -U kong kong -W
  2.  
    Password for user kong:
  3.  
    psql ( 9.6.10)
  4.  
    Type "help" for help.
  5.  
     
  6.  
    kong=>

PostgreSQL的部署使用和經過密碼登錄方式的設置參考:PostgresSQL數據庫的基本使用PostgreSQL的用戶究竟是這麼回事?新用戶怎樣才能用密碼登錄?

準備kong的配置文件,

  1.  
    cp kong.conf.default kong.conf
  2.  
    # 在 kong.conf中填入數據地址、用戶、密碼等

建立kong的數據庫:

./bin/kong migrations up -c ./kong.conf 

啓動kong:

./bin/kong start -c ./kong.conf 

kong默認的代理地址是:

proxy_listen = 0.0.0.0:8000, 0.0.0.0:8443

默認的管理地址是:

admin_listen = 127.0.0.1:8001, 127.0.0.1:8444 ssl

返回的是json字符串:

  1.  
    $ curl -i http://localhost:8001/
  2.  
    HTTP/ 1.1 200 OK
  3.  
    Date: Sat, 29 Sep 2018 08:56:51 GMT
  4.  
    Content- Type: application/json; charset=utf-8
  5.  
    Connection: keep-alive
  6.  
    Access-Control-Allow- Origin: *
  7.  
    Server: kong/0.14.1
  8.  
    Content- Length: 5667
  9.  
     
  10.  
    { "plugins":{"enabled_in_cluster":[],"availab...
  11.  
     

部署Kong Dashboard

PGBI/kong-dashboard是一個第三方的Dashboard。

  1.  
    docker run --rm -p 8080:8080 pgbi/kong-dashboard start \
  2.  
    --kong-url http://kong:8001
  3.  
    --basic-auth user1=password1 user2=password2

Kong的使用

中止:

kong stop 

從新加載:

kong reload

註冊API:添加服務、配置路由

添加服務Configuring a Service

添加一個名爲example-service的服務,服務地址是http://mockbin.org

  1.  
    curl -i -X POST \
  2.  
    --url http: //localhost:8001/services/ \
  3.  
    -- data 'name=example-service' \
  4.  
    -- data 'url=http://mockbin.org'

執行後返回:

  1.  
    {
  2.  
    "connect_timeout": 60000,
  3.  
    "created_at": 1538213979,
  4.  
    "host": "mockbin.org",
  5.  
    "id": "ebed2707-e2fb-4694-9e8e-fb66fe9dd7c8",
  6.  
    "name": "example-service",
  7.  
    "path": null,
  8.  
    "port": 80,
  9.  
    "protocol": "http",
  10.  
    "read_timeout": 60000,
  11.  
    "retries": 5,
  12.  
    "updated_at": 1538213979,
  13.  
    "write_timeout": 60000
  14.  
    }

example-service添加一個route,知足route的請求將被轉發給example-service,執行:

  1.  
    curl -i -X POST \
  2.  
    --url http: //localhost:8001/services/example-service/routes \
  3.  
    -- data 'hosts[]=example.com'

這裏配置的route條件是:host爲example.com。

返回:

  1.  
    {
  2.  
    "created_at": 1538185340,
  3.  
    "hosts": [
  4.  
    "example.com"
  5.  
    ],
  6.  
    "id": "4738ae2c-b64a-4fe5-9e2a-5855e769a9e8",
  7.  
    "methods": null,
  8.  
    "paths": null,
  9.  
    "preserve_host": false,
  10.  
    "protocols": [
  11.  
    "http",
  12.  
    "https"
  13.  
    ],
  14.  
    "regex_priority": 0,
  15.  
    "service": {
  16.  
    "id": "ebed2707-e2fb-4694-9e8e-fb66fe9dd7c8"
  17.  
    },
  18.  
    "strip_path": true,
  19.  
    "updated_at": 1538185340
  20.  
    }

這時候訪問kong的proxy地址時,若是host爲example.com,請求被轉發到http://mockbin.org

  1.  
    curl -i -X GET \
  2.  
    --url http: //localhost:8000/ \
  3.  
    --header 'Host: example.com'

能夠在/etc/hostsname中將example.com地址配置爲kong所在的機器的地址:

10.10.192.35 example.com 

而後就能夠經過example.com:8000打開http://mockbin.org。

插件啓用方法

插件是用來擴展API的,例如爲API添加認證、設置ACL、限制速率等、集成oauth、ldap等。

Kong Plugins中列出了已有的全部插件。

這裏演示key-auth插件的用法,Kong Enabling Plugins,。

  1.  
    curl -i -X POST \
  2.  
    --url http: //localhost:8001/services/example-service/plugins/ \
  3.  
    -- data 'name=key-auth'

返回:

  1.  
    {
  2.  
    "config": {
  3.  
    "anonymous": "",
  4.  
    "hide_credentials": false,
  5.  
    "key_in_body": false,
  6.  
    "key_names": [
  7.  
    "apikey"
  8.  
    ],
  9.  
    "run_on_preflight": true
  10.  
    },
  11.  
    "created_at": 1538218948000,
  12.  
    "enabled": true,
  13.  
    "id": "f25f3952-d0d4-4923-baac-860554fc2fc1",
  14.  
    "name": "key-auth",
  15.  
    "service_id": "ebed2707-e2fb-4694-9e8e-fb66fe9dd7c8"
  16.  
    }

這時候直接訪問example.com,會返回401:

  1.  
    curl -i -X GET \
  2.  
    > --url http: //localhost:8000/ \
  3.  
    > --header 'Host: example.com'
  4.  
    HTTP/ 1.1 401 Unauthorized
  5.  
    Date: Sat, 29 Sep 2018 11:03:55 GMT
  6.  
    Content-Type: application/json; charset=utf -8
  7.  
    Connection: keep-alive
  8.  
    WWW-Authenticate: Key realm= "kong"
  9.  
    Server: kong/ 0.14.1
  10.  
    Content-Length: 41

在kong中建立一個名爲Jason的用戶:

  1.  
    curl -i -X POST \
  2.  
    --url http: //localhost:8001/consumers/ \
  3.  
    -- data "username=Jason"

返回:

  1.  
    {
  2.  
    "created_at": 1538219225,
  3.  
    "custom_id": null,
  4.  
    "id": "f2450962-e4bb-477f-8df6-85984eb94e09",
  5.  
    "username": "Jason"
  6.  
    }

將Jason的密碼設置爲123456:

  1.  
    curl -i -X POST \
  2.  
    --url http: //localhost:8001/consumers/Jason/key-auth/ \
  3.  
    -- data 'key=123456'

返回:

  1.  
    {
  2.  
    "consumer_id": "f2450962-e4bb-477f-8df6-85984eb94e09",
  3.  
    "created_at": 1538219311000,
  4.  
    "id": "0332d36f-61b9-425a-b563-510c11a85e85",
  5.  
    "key": "123456"
  6.  
    }

這時候能夠用Jason的key訪問API:

  1.  
    curl -i -X GET \
  2.  
    --url http: //localhost:8000 \
  3.  
    --header "Host: example.com" \
  4.  
    --header "apikey: 123456"

返回的是mockbin.org的首頁。

key-auth插件的詳細用法參考Kong Plugin: key-auth。插件的做用範圍能夠是全局(global)、服務(service)、路由(router)。

啓用key-auth後,經過認證的請求被轉發給上游服務時,key-auth會增設下面的字段:

  1.  
    X-Consumer-ID, the ID of the Consumer on Kong
  2.  
    X-Consumer- Custom-ID, the custom_id of the Consumer (if set)
  3.  
    X-Consumer-Username, the username of the Consumer (if set)
  4.  
    X-Credential-Username, the username of the Credential (only if the consumer is not the 'anonymous' consumer)
  5.  
    X-Anonymous-Consumer, will be set to true when authentication failed, and the 'anonymous' consumer was set instead.

Kong的插件

Kong Plugins中列出了已有的全部插件,有些插件只能在企業版使用,有些插件是社區成員開發的,大部分是Kong公司開發,並集成到社區版中。

下面是社區版集成的、Kong公司維護的插件(2018-09-30 14:33:03):

認證插件:

  1.  
    Basic Auth
  2.  
    HMAC Auth
  3.  
    JWT Auth
  4.  
    Key Auth
  5.  
    LDAP Auth
  6.  
    OAuth 2.0 Auth

安全插件:

  1.  
    Bot Detection (機器人檢測)
  2.  
    CORS (跨域請求)
  3.  
    IP Restriction (IP限制)

流控插件:

  1.  
    ACL (訪問控制)
  2.  
    Rate Limiting (限速)
  3.  
    Request Size Limiting
  4.  
    Request Termination
  5.  
    Response Rate Limiting

微服務插件:

  1.  
    AWS Lambda
  2.  
    Azure Functions
  3.  
    Apache OpenWhisk
  4.  
    Serverless Functions

分析和監控插件:

  1.  
    Datadog
  2.  
    Prometheus
  3.  
    Zipkin

內容修改插件(Transformations):

  1.  
    Correlation ID
  2.  
    Request Transformer
  3.  
    Response Transformer

日誌插件:

  1.  
    File Log
  2.  
    HTTP Log
  3.  
    Loggly
  4.  
    StatsD
  5.  
    Syslog
  6.  
    TCP Log
  7.  
    UDP Log

Kong與Kubernetes的集成

通過前面的學習,對Api網關是什麼,以及Kong可以作什麼已經有了足夠的瞭解。如今Kubernetes一統計算資源與應用發佈編排的趨勢已經造成,咱們更關心Kong可否和Kubernetes結合。

Kong是一個Api網關,也是一個特性更豐富的反向代理,既然它有代理流量的功能,那麼能不能直接成爲Kubernetes的流量入口?使Kubernetes內部的服務都經過Kong發佈。

Kong實現了一個Kubernetes Ingress Controller來作這件事。在Kubernetes中部署kong的方法見Kong CE or EE on Kubernetes

這部份內容比較多,單獨開篇了: Kubernetes與API網關Kong的集成

遇到的問題

ERROR: module ‘socket’ not found:No LuaRocks module found for socket

啓動的時候:

  1.  
    # ./bin/kong start -c ./kong.conf
  2.  
    ...
  3.  
    ERROR: ./kong/globalpatches.lua: 63: module 'socket' not found:No LuaRocks module found for socket
  4.  
    ...

這是由於編譯kong以後,從新編譯了luarocks,而且將luarocks安裝在了其它位置。從新編譯kong以後解決。

ERROR: function to_regclass(unknown) does not exist (8)

建立數據庫的時候:

  1.  
    # kong migrations up -c ./kong.conf
  2.  
    ...
  3.  
    [postgres error] could not retrieve current migrations: [postgres error] ERROR: function to_regclass(unknown) does not exist (8)
  4.  
    ...

這是由於PostgreSQL的版本過低了,to_regclass在PostgreSQL 9.4及以上的版本中才存在。

  1.  
    yum install https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-7-x86_64/pgdg-centos96-9.6-3.noarch.rpm
  2.  
    yum install postgresql96
  3.  
    yum install postgresql96-server

nginx: [emerg] unknown directive 「real_ip_header」 in /usr/local/kong/nginx-kong.conf:73

nginx: [emerg] unknown directive "real_ip_header" in /usr/local/kong/nginx-kong.conf:73 

這是由於編譯的openresty的時候,沒有指定--with-http_realip_module,從新編譯安裝:

  1.  
    ./configure --with-pcre-jit --with-http_ssl_module --with-http_realip_module --with-http_stub_status_module --with-http_v2_module
  2.  
    make -j2
  3.  
    make install //默認安裝在/usr/local/bin/openresty
  4.  
    export PATH=/usr/local/openresty/bin:$PATH

參考

  1. nginx website
  2. OpenResty website
  3. Kong website
  4. Kong Compile Source
  5. nginx features
  6. nginx documentation
  7. Nginx Example Configuration & Directives
  8. Nginx: Alphabetical index of directives
  9. Nginx: Alphabetical index of variables
  10. Beginner’s Guide
  11. Nginx: ngx_http_fastcgi_module
  12. Nginx: ngx_http_proxy_module
  13. Nginx Documents
  14. Nginx: Module ngx_stream_core_module
  15. OpenResty website
  16. OpenResty Components
  17. OpenResty Getting Started
  18. Nginx Development guide
  19. Nginx Module develop
  20. PostgreSQL的用戶究竟是這麼回事?新用戶怎樣才能用密碼登錄?
  21. PostgresSQL數據庫的基本使用
  22. Kong Enabling Plugins
  23. Kong Plugin: key-auth
  24. Kong Plugins
  25. Kong CE or EE on Kubernetes
  26. Kong/kubernetes-ingress-controller
  27. PGBI/kong-dashboard

限時活動,每邀請一人即返回25元!

相關文章

《深刻剖析Kubernetes》專欄的閱讀筆記(持續更新)

Kubernetes網絡方案Flannel的學習筆記

《左耳聽風》陳皓專欄的閱讀筆記(持續更新)

Kubernetes1.12從零開始(五):本身動手部署Kubernetes(待續)

Kubernetes1.12從零開始(四):必須先講一下基本概念

Kubernetes1.12從零開始(三):用minikube與kubeadm部署

Kubernetes1.12從零開始(二):部署環境準備

Kubernetes1.12從零開始(一):官方文檔彙總

API網關Kong與Kubernetes的集成方法

PostgreSQL的用戶究竟是這麼回事?新用戶怎樣才能用密碼登錄?

相關文章
相關標籤/搜索