2015-09-28 124 views
2

我已經在具有一個主節點和兩個節點的AWS集羣中安裝了mesosphere,稱它們爲master,node1和node2。主人是可見的,節點是私人的。馬拉松不安全註冊表上的Docker註冊表

我得到一個默認運行的marathon實例和背面的docker支持。 Docker版本是1.6(已驗證)。

因此,我安裝使用馬拉松泊塢窗註冊表圖像中Marathon docs描述,與S3支持幾個變種,如:

{ 
     "id": "/docker/registry", 
     "instances": 1, 
     "cpus": 0.5, 
     "mem": 1024.0, 
     "disk": 128, 
     "container": { 
     "docker": { 
      "type": "DOCKER", 
      "image": "registry:2", 
      "network": "BRIDGE", 
      "portMappings": [ 
      { 
       "containerPort": 5000, 
       "hostPort": 0, 
       "protocol": "tcp", 
       "servicePort": 5000 
      } 
      ] 
     }, 
     "volumes": [] 
     }, 
     "env": { 
     "APPLICATION_WEB_PROXY_BASE": "/service/docker_registry", 
     "SETTINGS_FLAVOR": "s3", 
     "REGISTRY_VERSION": "0.1", 
     "REGISTRY_LOG_LEVEL": "debug", 
     "REGISTRY_STORAGE": "s3", 
     "REGISTRY_STORAGE_S3_ACCESSKEY": "ACCESSKEY", 
     "REGISTRY_STORAGE_S3_SECRETKEY": "SECRETKEY", 
     "REGISTRY_STORAGE_S3_REGION": "us-east-1", 
     "REGISTRY_STORAGE_S3_BUCKET": "my-docker-registry", 
     "REGISTRY_STORAGE_S3_ROOTDIRECTORY": "/docker", 
     "AWS_PATH": "/docker", 
     "STORAGE_PATH": "/docker" 
     }, 
     "ports": [ 0 ] 
    } 

泊塢窗註冊表服務中的節點中的一個開始。說... node1.amazonaws.com:23456。請注意,節點和端口是由馬拉松隨機選擇的。如果我重新啓動,並且我不知道將事先選擇哪個節點和端口,則無法保證再次選取相同的節點和端口。

因此,註冊表工作,我可以使用其餘的API(從主ssh行)作爲:wget node1.amazonaws.com:23456/v2,我得到正確的JSON響應{}。

但後來我想這樣做推到服務器,我得到這樣的消息

"FATA[0000] Error response from daemon: v1 ping attempt failed with error: 
Get https://myregistrydomain.com:5000/v1/_ping: tls: oversized record received with length 20527. 
If this private registry supports only HTTP or HTTPS with an unknown CA certificate,please add 
`--insecure-registry myregistrydomain.com:5000` to the daemon's arguments. 
In the case of HTTPS, if you have access to the registry's CA certificate, no need for the flag; 
simply place the CA certificate at /etc/docker/certs.d/myregistrydomain.com:5000/ca.crt" 

所以我想我需要設置不安全的註冊表標誌。或設置CA證書。因爲我現在不需要證書,所以我只需要讓它不安全。但是這個標誌必須設置爲--insecure-registry myregistrydomain.com:5000

但是,然後你得到的問題,主機和端口都動態設置。所以我不能把它放到任何地方的配置文件中(而且我不知道它是在哪裏使用CoreOS,並且沒有/ etc/default/docker文件)。

我試圖將它傳遞到Marathon JSON應用程序。我記得有可能使用$HOST$PORT ENV變量,所以我試圖在容器中加入它們作爲參數爲:

... 
container: 
"network": "BRIDGE", 
"parameters": [{ "key": "insecure-registry", "value": "$HOST:$PORT" }], 
"portMappings": [ 
... 

但服務就不會啓動。然後,我嘗試將它設置在ARGS:

... 
    "disk": 128, 
    "args": ["--insecure-registry $HOST:$PORT"], 
    "container": { 
... 

但我得到一個消息,說:

Executor registered on slave 20150928-002726-2617573386-5050-1278-S1 flag provided but not defined: -insecure-registry

所以我試着設置一個DOCKER_OPTS環境變量爲:

"env": { 
    "DOCKER_OPTS": "--insecure-registry $HOST:$PORT", 
    "APPLICATION_WEB_PROXY_BASE": "/service/docker_registry", 

但它只是忽略了國旗。

換句話說,我不知道在哪裏使它不安全。

任何想法將不勝感激。

謝謝!

回答

0

您可以強制通過constraints某些節點上,部署在馬拉松的應用規範,如下面的例子所示:

... 
"constraints": [ 
    [ 
     "hostname", 
     "LIKE", 
     "node1.amazonaws.com" 
    ] 
] 
... 
+0

我想所以,但是這不會打敗HA的想法嗎?我的意思是......如果節點崩潰,那麼馬拉松應該能夠在另一個節點中產生另一個服務實例。通過約束節點,我失去了擁有集羣的主要優點之一。 –

+0

正確。我的意思是:您可以使用約束來影響您的部署,這可能對您有所幫助。可能不是我給出的最好的例子,授予。 –

+0

我認爲這個問題是錯的。因爲我一直在閱讀不安全的註冊表標誌是一個碼頭客戶端的事情,而不是一個 –

2

我認爲這個問題是錯誤的概念。我試圖將--insecure-registry標誌添加到註冊表中,以便將其添加到將訪問註冊表的docker守護進程中。在DCOS的情況下,它必須被添加到每個從節點。 按邁克爾的建議,我認爲這可以通過鎖定註冊表端口和使用mesos-dns解決從屬主機名解決,所以例如我可以使用DNS名稱dockerregistry.marathon.mesos將解析到適當的服務器和鎖定端口是5000,即:

--insecure-registry dockerregistry.marathon.mesos:5000 

當然,這會限制我只能在一臺服務器在任何時候運行一個實例,但是這是一切OK,我只需要一個實例。重要的是當新實例啓動時,它指向正確的S3存儲桶。

所以,現在的問題是如何重新啓動運行在CoreOS上的Docker守護進程,添加此標誌的整個集羣,但我認爲這是另一個問題。

+0

如果您在任何地方發現任何後續問題的答案,或者鏈接到對這個過程的完整解釋在這裏很有用。 –

1

我相信這是回答DCOS documentation

複製並從上面鏈接的例子粘貼:

運行這個集羣中的所有代理節點:

$ sudo tee /etc/systemd/system/docker.service.d/override.conf <<-'EOF' 
[Service] 
EnvironmentFile=-/etc/sysconfig/docker 
EnvironmentFile=-/etc/sysconfig/docker-storage 
EnvironmentFile=-/etc/sysconfig/docker-network 
ExecStart= 
ExecStart=/usr/bin/docker daemon -H fd:// $OPTIONS \ 
    $DOCKER_STORAGE_OPTIONS \ 
    $DOCKER_NETWORK_OPTIONS \ 
    $BLOCK_REGISTRY \ 
    $INSECURE_REGISTRY \ 
    --storage-driver=overlay \ 
    --insecure-registry registry.marathon.l4lb.thisdcos.directory:5000 
EOF 

systemctl daemon-reload 
systemctl restart docker 
+0

注意別人可能會盲目複製粘貼這個像我一樣:確保在運行此操作之前,將'--insecure-registry'標誌中給出的註冊表名稱更改爲實際註冊表的內容:) – nerdherd