dockerregistry上的马拉松不安全registry

我在具有一个主节点和两个节点的AWS群集中安装了mesosphere,将它们称为master,node1和node2。 主人是可见的,节点是私人的。

我得到一个默认运行的马拉松实例和Docker支持。 Docker版本是1.6(已validation)。

所以我使用Marathon文档中描述的marathon安装了一个dockerregistry映像,以及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 ] } 

dockerregistry服务从其中一个节点启动。 说… node1.amazonaws.com:23456。 注意节点和端口是由马拉松随机select的。 没有什么保证,如果我重新启动,同样的节点和端口将被挑选,我不知道哪个节点和端口将被选中。

所以registry工作,我可以使用其余的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" 

所以我想我需要设置不安全的registry标志。 或者设置一个CA证书。 因为我现在不需要证书,所以我只需要使它不安全。 但是那么这个标志必须被设置为--insecure-registry myregistrydomain.com:5000

但是,那么你得到的问题,主机和端口是dynamic设置的。 所以我不能把它放在任何地方的configuration文件(我不知道这是否使用CoreOS,没有/ etc / default / docker文件)。

我试图把它传递到马拉松JSON应用程序。 我记得有可能使用$HOST$PORT envvariables,所以我尝试将它们作为参数添加到容器中,如下所示:

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

但服务不会启动。 然后我尝试在参数中设置它:

 ... "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_OPTSvariables为:

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

但它只是忽略了国旗。

换句话说,我不知道在哪里使它不安全。

任何想法将不胜感激。

谢谢!

我认为这个问题在概念上是错误的。 我试图将--insecure-registry标志添加到registry,当它必须被添加到将访问registry的--insecure-registry守护进程。 在DCOS的情况下,它必须被添加到每个从节点。 通过迈克尔的build议,我认为这可以通过lockingregistry端口和使用mesos-dns来解决从属主机名解决,所以例如我可以使用DNS名称dockerregistry.marathon.mesos将parsing到适当的服务器和locking的端口5000,即:

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

当然,这将限制我只能在一台服务器上随时运行一个实例,但这一切都可以,我只需要一个实例。 重要的是当新的实例启动时,它指向正确的S3存储桶。

所以,现在的问题是如何在整个集群上重新启动在CoreOS上运行的docker守护进程,添加这个标志,但是我认为这是另外一个问题。

我相信这在DCOS文档中得到了解答

从上面链接的例子复制并粘贴:

在集群的所有代理节点中运行此操作:

 $ 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 

您可以通过Marathon应用程序规范中的约束来强制部署某些节点,如以下示例所示:

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