【发布时间】:2018-02-22 19:32:16
【问题描述】:
我们已经使用 this handy guide 在 AWS 上设置了 OpenShift Origin。我们的最终 希望有一些 pod 运行 REST 或我们可以访问的类似服务 用于开发目的。因此,我们此时不需要 DNS 或类似的东西 点,只是一个具有开放端口的公共 IP,它指向我们正在运行的 pod 之一。 我们的第一个概念证明是尝试获得一个 jenkins(甚至只是 httpd!)pod 它在 OpenShift 内部运行,通过分配的弹性 IP 公开。
无论如何我都不是网络工程师,但我能够成功获得 一个弹性 IP 连接到我的 OpenShift“工作”实例之一,我 通过 ssh 到分配给弹性 IP 的公共 IP 进行测试。在此刻 我们正在努力弄清楚如何使分配了弹性 IP 的 pod 可见, 不过。我们尝试了一个 kubernetes LoadBalancer 服务,一个 kubernetes Ingress, 并配置 AWS 网络负载均衡器,但都无法 成功连接到18.2XX.YYY.ZZZ:8080(我的公网IP)。
最有希望的成功是使用oc port-forward 似乎至少取得了部分进展
通过,但令人沮丧地挂起而没有返回:
$ oc port-forward --loglevel=7 jenkins-2-c1hq2 8080 -n my-project
I0222 19:20:47.708145 73184 loader.go:354] Config loaded from file /home/username/.kube/config
I0222 19:20:47.708979 73184 round_trippers.go:383] GET https://ec2-18-2AA-BBB-CCC.us-east-2.compute.amazonaws.com:8443/api/v1/namespaces/my-project/pods/jenkins-2-c1hq2
....
I0222 19:20:47.758306 73184 round_trippers.go:390] Request Headers:
I0222 19:20:47.758311 73184 round_trippers.go:393] X-Stream-Protocol-Version: portforward.k8s.io
I0222 19:20:47.758316 73184 round_trippers.go:393] User-Agent: oc/v1.6.1+5115d708d7 (linux/amd64) kubernetes/fff65cf
I0222 19:20:47.758321 73184 round_trippers.go:393] Authorization: Bearer Pqg7xP_sawaeqB2ub17MyuWyFnwdFZC5Ny1f122iKh8
I0222 19:20:47.800941 73184 round_trippers.go:408] Response Status: 101 Switching Protocols in 42 milliseconds
I0222 19:20:47.800963 73184 round_trippers.go:408] Response Status: 101 Switching Protocols in 42 milliseconds
Forwarding from 127.0.0.1:8080 -> 8080
Forwarding from [::1]:8080 -> 8080
( oc port-forward hangs at this point and never returns)
我们找到了很多关于如何在 GKE 下运行的信息,但是 没有什么对让 OpenShift Origin 正常工作真正有帮助的 AWS。有什么想法吗?
更新:
因此我们意识到 sysdig.com 关于在 AWS 上部署 OpenShift Origin 的博文缺少一些关键的 AWS 设置信息,因此基于OpenShift Origin's Configuring AWS page,我们设置了以下 env 变量并重新运行了 ansible playbook:
$ export AWS_ACCESS_KEY_ID='AKIASTUFF'
$ export AWS_SECRET_ACCESS_KEY='STUFF'
$ export ec2_vpc_subnet='my_vpc_subnet'
$ ansible-playbook -c paramiko -i hosts openshift-ansible/playbooks/byo/config.yml --key-file ~/.ssh/my-aws-stack
我认为这让我们更接近了,但现在创建负载平衡器服务会为我们提供一个始终未决的 IP:
$ oc get services
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
jenkins-lb 172.30.XX.YYY <pending> 8080:31338/TCP 12h
AWS Applying Configuration Changes 上的部分似乎暗示我需要使用 AWS 实例 ID 而不是主机名来识别我的节点,但我尝试了这个,如果我使用该方法,OpenShift Origin 将无法启动。还是一头雾水。
【问题讨论】:
-
oc port-forward命令不会返回,它会一直运行直到你中断它。您可能误解了oc port-forward的用途。它用于创建从 pod 到本地计算机的临时连接。运行它后,您将连接到127.0.0.1:8080以向该 pod 中的应用程序发出请求。您可以在learn.openshift.com 的练习中查看使用端口转发的示例。 -
@GrahamDumpleton 好的,那么 oc port-forward 实际上并没有在本地主机“环回”之外公开这个?所以那次特别的尝试也许是在找错树。
-
@OgrePsalm33 您应该重新考虑将弹性 IP 分配给 pod。 EIP 可以绑定到 EC2 实例,而不是 Pod。理想情况下,您会将 EIP 绑定到托管 Openshift 路由器的 EC2 实例,并通过路由器公开您的 Kubernetes 服务。这样,您就可以通过 Openshift 路由中指定的主机名访问该服务。
-
@VineetReynolds 所有关于 OpenShift 路由和路由器的文档都让我相信它们只有在我有一个面向外部的域名时才有用,而我们目前还没有。除非我们可以路由到超长 AWS 生成的主机名? (即:
ec2-18-2AA-BBB-CCC.us-east-2.compute.amazonaws.com) -
@OgrePsalm33 值得一试。使用假主机名可能会更好。在这种情况下,很可能只有您的浏览器需要帮助来定位主机 - 通过客户端上的
etc/hosts条目轻松解决。
标签: amazon-web-services kubernetes openshift openshift-origin