gpt4 book ai didi

马拉松不安全注册表上的 Docker 注册表

转载 作者:行者123 更新时间:2023-12-02 18:16:59 27 4
gpt4 key购买 nike

我在一个带有一个主节点和两个节点的 AWS 集群中安装了 mesosphere,分别称为主节点、节点 1 和节点 2。主节点是可见的,节点是私有(private)的。

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

因此,我按照 Marathon docs 中的描述使用 marathon 安装了一个 docker 注册表镜像,并带有一些 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。注意节点和端口是马拉松随机选择的。如果我重新启动并且我不知道会事先选择哪个节点和端口,没有什么可以保证会再次选择相同的节点和端口。

所以注册表工作,我可以使用它的rest API(来自master中的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 环境变量,所以我尝试将它们作为参数添加到容器中:
...
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",

但它只是忽略了标志。

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

任何想法将不胜感激。

谢谢!

最佳答案

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

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

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

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

关于马拉松不安全注册表上的 Docker 注册表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32818818/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com