2017-10-13 123 views
0

最近我尝试在中国的AWS上使用Kubernetes v1.7.3和jenkins v2.73.2建立CI/CD流(GFW阻塞dockerhub)。使用相同的URL显示相同的服务,但有两个不同的端口与traefik?

现在我可以用traefik公开服务,但似乎我不能用两个不同的端口使用相同的URL公开相同的服务。

理想我想揭露http://jenkins.mydomain.com为端口80上詹金斯的用户界面,以及端口的詹金 - 从(詹金斯发现)50000 例如,我想这个工作:

apiVersion: extensions/v1beta1 kind: Ingress metadata: name: jenkins namespace: default spec: rules: - host: jenkins.mydomain.com http: paths: - path:/ backend: serviceName: jenkins-svc servicePort: 80 - host: jenkins.mydomain.com http: paths: - path:/ backend: serviceName: jenkins-svc servicePort: 50000 和我的詹金斯-SVC被定义为

apiVersion: v1 kind: Service metadata: name: jenkins-svc labels: run: jenkins spec: selector: run: jenkins ports: - port: 80 targetPort: 8080 name: http - port: 50000 targetPort: 50000 name: slave

在现实中,后者的规则将覆盖前规则。

此外,有两个插件我尝试过:kubernetes-cloudkubernetes。 使用前一选项,我无法配置jenkins-tunnel URL,所以从站无法与主站连接;与后者的选项,我不能从私人码头注册表,如AWS ECR(没有地方配置凭据),因此无法创建从属(imagePullError)。

最后,我真的只是想让詹金斯工作(创建奴隶与我的自定义图像,建立奴隶和删除工作完成后的奴隶),欢迎任何其他解决方案。

+0

为了能够从ECR拉你,你可以具有适当权限的AWS实例角色。拉将使用实例元数据并透明地工作。 – vascop

回答

0

如果您希望jenkins可以从集群外部访问,那么您需要更改ingress配置。 ingress类型的

默认类型是ClusterIP

自曝上群集内部IP服务。选择此值使得该服务只能从群集内访问。这是默认的服务类型

你想让它类型为NodePort

在静态端口(NodePort)自曝在每个节点上的IP服务。将自动创建NodeIP服务将路由到的ClusterIP服务。您可以联系NodePort服务,从集群外,通过请求:

所以你的服务应该是这样的:

apiVersion: v1 kind: Service metadata: name: jenkins-svc labels: run: jenkins spec: selector: run: jenkins type: NodePort ports: - port: 80 targetPort: 8080 name: http - port: 50000 targetPort: 50000 name: slave

相关问题