【发布时间】:2018-03-08 12:18:13
【问题描述】:
首次试用 VMWare 的 Harbor 注册服务器,并将其作为新 Kubernetes 集群上的部署进行尝试。
按照Harbor on Kubernetes 指南,所有Harbor 资源都被应用到k8s 集群上,并且可以看到运行正常。但是,我目前无法从网络浏览器访问 Harbour ui(我只是得到“无法连接”)。我的猜测是安全设置不正确,缺少某些东西或放在错误的地方?
make/harbor.cfg 文件配置为:
hostname = k8s-dp-2 # 这是运行 Harbor 的工作节点..
ui_url_protocol = https
ssl_cert = /path/to/cert/on/host/harbor.crt
ssl_cert_key = /path/to/cert/on/host/harbor.key
secretkey_path = /data
我假设上述证书的路径是主机上的路径,python 脚本将从该路径获取文件然后进行 YAML 构建?
---- 更新 ---
根据 cmets 给出的建议,我现在已经在 k8s 集群中配置了一个 nginx 入口控制器。添加这个入口控制器后,我更新了 Harbor 配置以使用 http 而不再使用 https,因为 https 部分现在应该由 nginx 入口控制器处理。但是,随着这些配置更改到位,我仍然无法通过 https 访问 Harbor 服务,但我现在可以通过 kubernetes 集群的 http 端口调用 Harbor 服务。请参阅下面的测试
# kubectl get svc -n=nginx-ingress
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx-ingress NodePort 10.103.165.23 <none> 80:31819/TCP,443:30435/TCP 20h
测试调用 1:
$ curl https://k8s-dp-2/
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0curl: (7) Failed to connect to k8s-dp-2 port 443: Connection refused
测试调用 2:
$ curl https://k8s-dp-2:30435/
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
curl: (60) SSL certificate problem: self signed certificate
More details here: https://curl.haxx.se/docs/sslcerts.html
curl performs SSL certificate verification by default, using a "bundle"
of Certificate Authority (CA) public keys (CA certs). If the default
bundle file isn't adequate, you can specify an alternate file
using the --cacert option.
If this HTTPS server uses a certificate signed by a CA represented in
the bundle, the certificate verification probably failed due to a
problem with the certificate (it might be expired, or the name might
not match the domain name in the URL).
If you'd like to turn off curl's verification of the certificate, use
the -k (or --insecure) option.
测试调用 3:
$ curl http://k8s-dp-2/
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0curl: (7) Failed to connect to k8s-dp-2 port 80: Connection refused
测试调用 4:
$ curl http://k8s-dp-2:31819/
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 810 100 810 0 0 12857 0 --:--:-- --:--:-- --:--:-- 12857<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Harbor</title>
<base href="/">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" type="image/x-icon" href="favicon.ico?v=2">
</head>
<body style="overflow-y: hidden;">
...
【问题讨论】:
-
我不知道harbor,但是快速浏览一下教程,它看起来像是在使用入口资源来公开其服务。您是否在集群中部署了入口控制器?也许您可以澄清一下您是如何部署集群的以及它是如何组成的。
-
@whites11,是的,入口资源正在 k8s-dp-2 上运行。当我这样做时它会显示它:
kubectl get ing. -
ingress resouce(顺便说一句,它不会“运行”任何东西)和ingress controller之间存在巨大差异。入口控制器基本上是一个反向代理,它根据ingress resources中指定的规则将外部请求转发到您的 k8s 服务。所以再一次,你的集群中有入口控制器吗? (阅读此处了解更多详情kubernetes.io/docs/concepts/services-networking/ingress) -
哦,在那种情况下,不,我不知道。我已经在虚拟机上设置了这个 k8s 集群,只是为了在 Kubernetes 中测试 Harbor,所以除了 Harbor Yamls 创建的内容之外,这个卡斯特上没有任何其他内容。我会阅读您发送的链接。
-
@whites11,我现在在集群中运行了一个 nginx 入口控制器,但行为没有改变。但是,我确实在与港口入口
Event(v1.ObjectReference{Kind:"Ingress", Namespace:"default", Name:"harbor", UID:"7c601883-22b7-11e8-85df-080027c8e7b8", APIVersion:"extensions", ResourceVersion:"16361", FieldPath:""}): type: 'Normal' reason: 'AddedOrUpdated' Configuration for default/harbor was added or updated关联的入口控制器中看到了一个日志。但我不知道从这里还能看到哪里......
标签: docker kubernetes harbor