marathon insecure-registry

时间:2015-09-28 08:38:07

标签: docker mesos marathon

我在AWS集群中安装了mesosphere,其中包含一个主节点和两个节点,称之为master,node1和node2。主设备可见,节点是私有的。

我得到一个默认运行的马拉松实例和背面的docker支持。 Docker版本为1.6(已验证)。

所以我使用marathon安装了一个docker注册表图像,如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 ]
    }

docker注册服务在其中一个节点中启动。说... 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"

所以我想我需要设置insecure-registry标志。或设置CA证书。因为我现在不需要证书,所以我只需要让它不安全。但是标志必须设置为--insecure-registry myregistrydomain.com:5000

但是你得到了问题,主机和端口是动态设置的。所以我无法在任何地方将它放入配置文件中(我不知道它在哪里使用CoreOS并且没有/ etc / default / docker文件)。

我试图将它传递到Marathon JSON App。我记得可以使用$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变量设置为:

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

但它只是忽略了旗帜。

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

非常感谢任何想法。

谢谢!

3 个答案:

答案 0 :(得分:2)

我认为这个问题在概念上是错误的。当我必须将--insecure-registry标志添加到将访问注册表的docker守护程序时,我试图将mesos-dns标志添加到注册表中。在DCOS的情况下,必须将其添加到每个从节点。 通过迈克尔的建议,我认为可以通过锁定注册表端口并使用--insecure-registry dockerregistry.marathon.mesos:5000 来解析从属主机名来解决这个问题,所以例如我可以使用DNS名称dockerregistry.marathon.mesos来解决这个问题。服务器和锁定端口5000,即:

public void ConfigureServices(IServiceCollection services)
{
    var env = services.BuildServiceProvider().GetRequiredService<IHostingEnvironment>();
    if (env.IsDevelopment())
        Console.WriteLine("Development");
    else if (env.IsProduction())
        Console.WriteLine("Production");
    else if (env.IsEnvironment("MyCustomEnvironment"))
        Console.WriteLine("MyCustomEnvironment");
}

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

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

答案 1 :(得分: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

答案 2 :(得分:0)

您可以在Marathon应用规范中通过constraints强制部署某些节点,如下例所示:

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