国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

基于容器的后端服務架構

nifhlheimr / 2531人閱讀

摘要:結構大致為安裝如果檢測到多個會報錯,可以用指定一個指定啟動因為需要調用,所以需要把映射到容器內部,如果你使用了,那么需要設置對應的。我這里是啟動服務,這里需要注意的是這些環(huán)境變量,作用是的默認值,見名知意,在文檔中有詳細介紹。

基于容器的后端服務架構

在探索kubernetes的應用時,調研了幾個gateway,發(fā)現(xiàn)fabio支持發(fā)現(xiàn)服務,自動生成路由,結合consul,registrator, 可以很容易的部署一套服務,比較輕量,很容易玩起來。

結構大致為:

Start Consul

安裝 consul, 如果檢測到多個 private ip, 會報錯,可以用 -advertise 指定一個ip.

// config.json , 指定 DNS port
{
    "recursors" : [ "8.8.8.8" ],
    "ports" : {
        "dns" : 53
    }
}

sudo docker run -d --name=consul --net=host -v $PWD/config.json:/config/config.json gliderlabs/consul-server -bootstrap -advertise=172.28.128.3 

curl 172.28.128.3:8500/v1/catalog/services
Start Registrator

啟動 registrator, 因為需要調用docker api, 所以需要把docker.sock 映射到容器內部,如果你使用了tcp, 那么需要設置對應的url。

如果你希望上報容器內部ip:port, 那么需要在啟動參數(shù)中加入 -internal=true, 這樣注冊的 Service, 都是容器內部的ip, 而port對于同一個service而言,一般是固定的,例如 一個hello服務的兩個實例分別為 10.10.1.12:9090, 10.10.1.13:9090. 這樣的話,就需要配置一個容器跨host的網(wǎng)絡方案,例如 flannel, 等。 可以參考上一篇 Flannel with Docker

為了簡便測試,這里就不配置flannel了。-ip是指定注冊service時候使用的ip,建議要指定,選取當前機器的內網(wǎng) private ip即可。我這里是 172.28.128.3.

sudo docker run -d --name=registrator --volume=/var/run/docker.sock:/tmp/docker.sock gliderlabs/registrator:latest -ip=172.28.128.3 consul://172.28.128.3:8500 
Start service

啟動服務,這里需要注意的是這些環(huán)境變量,作用是 override Registrator的默認值,見名知意,在 registrator 文檔中有詳細介紹。例如 SERVICE_9090_NAME 就是指 端口為 9090 的service 的 name。

需要注意的是 tags 這個字段,urlprefix-/foo,hello, 這里 urlprefix- 是 gateway 的一種配置,意思為 把訪問 /foo 為前綴的請求轉發(fā)到當前應用來。他能夠匹配到例如 /foo/bar, footest, 等。如果你想加上域名的限制,可以這樣 urlprefix-mysite.com/foo。 后面還有一個 hello, 作用是給這個service打一個標記,可以用作查詢用。

sudo docker run -d -P -e SERVICE_9090_CHECK_HTTP=/foo/healthcheck -e SERVICE_9090_NAME=hello -e SERVICE_CHECK_INTERVAL=10s -e SERVICE_CHECK_TIMEOUT=5s -e SERVICE_TAGS=urlprefix-/foo,hello silentred/alpine-hello:v2

curl 172.28.128.3:8500/v1/catalog/services
//現(xiàn)在應該能看到剛啟動的hello服務了
{"consul":[],"hello":["urlprefix-mysite.com/foo","hello","urlprefix-/foo"]}

測試 DNS

sudo yum install bind-utils
dig @172.28.128.3 hello.service.consul SRV

可以設置 /etc/resolv.conf

nameserver 172.28.128.3
search service.consul

這樣無論在容器內部,還是外部都可以直接解析 sevice 名, 例如:

[vagrant@localhost ~]$ ping hello
PING hello.service.consul (172.28.128.3) 56(84) bytes of data.
64 bytes from localhost.localdomain.node.dc1.consul (172.28.128.3): icmp_seq=1 ttl=64 time=0.016 ms

[vagrant@localhost ~]$ sudo docker exec -it fdde1b8247b8 bash
bash-4.4# ping hello
PING hello (172.28.128.6): 56 data bytes
64 bytes from 172.28.128.6: seq=0 ttl=63 time=0.361 ms
Start Gateway

前端Gateway 根據(jù) consul中注冊的 service,生成對應的路由規(guī)則,把流量分發(fā)到各個節(jié)點。 這個項目還有一個 ui 管理 route信息,端口為 9998。

創(chuàng)建一個配置文件 fabio.properties

registry.consul.addr = 172.28.128.3:8500

在當前目錄運行

docker run -d -p 9999:9999 -p 9998:9998 -v $PWD/fabio.properties:/etc/fabio/fabio.properties magiconair/fabio

測試gateway:

curl 172.28.128.3:9999/foo/bar
curl 172.28.128.3:9999/foo/bar -H "Host: mysite.com"

Health Check
sudo ifdown eth1

curl http://localhost:8500/v1/health/state/critical

[
    {
        "Node":"localhost.localdomain",
        "CheckID":"service:afa2769cd049:loving_shannon:9090",
        "Name":"Service "hello" check",
        "Status":"critical",
        "Notes":"",
        "Output":"Get http://172.28.128.6:32768/foo/healthcheck: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)",
        "ServiceID":"afa2769cd049:loving_shannon:9090",
        "ServiceName":"hello",
        "CreateIndex":379,
        "ModifyIndex":457
    }
]

sudo ifup eth1

在啟動 consul的時候,我們使用了-ui 參數(shù),我們可以在 172.28.128.3:8500/ui 訪問到consul的web ui管理界面,看到各個服務的狀態(tài).

對比

注冊容器外IP:
每個注冊的service的port都是變化的,并且因為映射內部port到了host,外部可以隨意訪問,私密性較弱。

注冊容器內IP:
每個注冊的service的port都是固定的,只能從容器內部訪問。如果用 flannel,可能有一些性能損失。

DNS服務發(fā)現(xiàn)

查了一下如何利用DNS SRV類型來發(fā)現(xiàn)服務。本來以為可以用類似 Dial("hello", SRV) 的魔法 (我們都是膜法師,+1s), 查了一些資料貌似沒有這么方便。看了下golang的net包,發(fā)現(xiàn)了兩個方法 LookupSRV, LookupHost, 于是測試了一下,看下結果,大家知道該怎么用了吧,嘿嘿。

cname, addrs, err := net.LookupSRV("", "", "hello.service.consul")
fmt.Printf("%s, %#v, %s 
", cname, addrs, err)
for _, srv := range addrs {
    fmt.Printf("%#v 
", *srv)
}

newAddrs, err := net.LookupHost("hello.service.consul")
fmt.Printf("%#v, %s 
", newAddrs, err)
//output
[vagrant@bogon dns]$ go run mx.go
hello.service.consul., []*net.SRV{(*net.SRV)(0xc420010980), (*net.SRV)(0xc4200109a0)}, %!s()
net.SRV{Target:"bogon.node.dc1.consul.", Port:0x8003, Priority:0x1, Weight:0x1}
net.SRV{Target:"bogon.node.dc1.consul.", Port:0x8000, Priority:0x1, Weight:0x1}
[]string{"172.28.128.3", "172.28.128.4"}, %!s()

文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/26764.html

相關文章

  • Java 類文章 - 收藏集 - 掘金

    摘要:而調用后端服務就應用了的高級特分布式配置管理平臺后端掘金輕量的分布式配置管理平臺。關于網(wǎng)絡深度解讀后端掘金什么是網(wǎng)絡呢總的來說,網(wǎng)絡中的容器們可以相互通信,網(wǎng)絡外的又訪問不了這些容器。 在 Java 路上,我看過的一些書、源碼和框架(持續(xù)更新) - 后端 - 掘金簡書 占小狼轉載請注明原創(chuàng)出處,謝謝!如果讀完覺得有收獲的話,歡迎點贊加關注 物有本末,事有終始,知所先后,則近道矣 ......

    RayKr 評論0 收藏0
  • 容器容器編排

    摘要:從容器到容器編排平臺以及周邊生態(tài)系統(tǒng)包含很多工具來管理容器的生命周期。終止運行中的容器。發(fā)現(xiàn)在由運行于多個主機上的容器組成的分布式部署容器發(fā)現(xiàn)至關重要。類似的,當容器崩潰時,編排工具可以啟動替換。 從容器到容器編排 Docker平臺以及周邊生態(tài)系統(tǒng)包含很多工具來管理容器的生命周期。例如,Docker Command Line Interface(CLI)支持下面的容器活動: 從注冊表...

    Hydrogen 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<