如何调试常见的docker错误?(视频)

保罗•潘
2022-03-20 36

如何调试在K8s上运行的Artifactory中与Docker存储库相关的常见错误

视频记录:
你好。我是来自JFrog Support的Paul Pan。在今天的短视频中,我将向您演示如何调试常见的docker错误。让我们看一个例子。我将尝试登录到我的docker注册表,它感觉与v2请求。好的。因此,我要做的第一项技术是尝试运行v2,一个curl命令,在没有身份验证的情况下到达这个v2位置。如你所见,我从Artifactory得到了一个完整的。这是预期的,但我还预期在返回头中有一个域。好吧? I’m not seeing that. So something is wrong with Artifactory handling this request. Let’s check why.

我进入Artifactory的锁文件夹,我将告诉Artifactory请求日志。我将用grep来处理v2请求。我要再登录一次。好的。我可以马上看到它会到达v2端点,这里有401,但我不期望它会直接到达v2通过我配置的子域方法。这里展示了子域方法反向代理配置与其他方法的不同之处。因此,当它到达反向代理时,我期望它重写到Artifactory/api/docker前缀的v2请求,并使用我传递的存储库名称。我在请求日志里没看到。所以我的反向代理设置一定有问题。让我们看看我的反向代理设置是什么。 Okay. As you can see, I am using a reverse proxy settings with sub domain method, so things looks good, except my server name here does not match what my server name was provided in the docker login command, so let’s try to modify it. I’m modifying my configuration. And let’s try to restart the nginx.

好的。现在让我们重新启动它。让我们再次进行docker登录。现在它成功了。在这里,正如你所看到的,与直接访问方法相比,我需要注意反向代理子域的事情是,在服务器名称中,我需要在我的docker主机中精确匹配,它能够获得存储库名称,并正确地重写v2请求。反向代理中需要注意的其他一些设置是x - jfrog - overrides - base - url。这个URL将由Artifactory返回。这就是我们在return中获得realm URL的方式。注意,这个URL有端口,它将从nginx设置中抓取,主机和服务器端口。就更复杂的设置而言,比如在Kubernetes环境中,通常会看到客户端在使用反向代理之前先使用负载均衡器。

示例中,我演示了docker客户端直接命中反向代理。这样他就能从请求中获得正确的服务器端口。然而,如果你在反向代理前有一个负载均衡器,并且你在负载均衡器上终止SSL,那么当请求从负载均衡器命中nginx时,端口已经被更改了。在默认设置中,我们依赖于设置自动从请求获取服务器端口。但是如果您前面有一个负载均衡器,您可能希望将几个端口硬编码为您的负载均衡器没有列出的端口。

否则,第一个需要的请求将会成功。但是当你真正登录时,它会失败。我在Kubernetes环境中调试时经常使用的另一种技术是端口转发命令。端口转发允许您将特定端口或服务直接转发到本地主机。在调试网络问题时,特别是在Kubernetes上的Docker,在Kubernetes上的Docker with Artifactory,很难隔离每个网络组件。因此端口转发将允许您一起绕过某些网络组件来测试您的设置或测试请求是否能够到达Artifactory。

好的。今天的会议到此结束。如果你有任何问题和意见,请在下方留言,下次见。