0

最近我正在尝试在中国的 AWS 上使用 Kubernetes v1.7.3 和 jenkins v2.73.2 设置 CI/CD 流(GFW 阻止 dockerhub)。

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

理想情况下,我希望将http://jenkins.mydomain.com公开为端口 80 上的 jenkins-ui,以及端口 50000 上的 jenkin-slave (jenkins-discovery)。例如,我希望它能够工作:

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 我的 jenkins-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 等私有 docker 注册表中提取(没有地方提供凭证),因此无法创建从属(imagePullError)。

最后,实际上我只是想让 jenkins 工作(使用我的自定义映像创建从站,使用从站构建并在作业完成后删除从站),欢迎任何其他解决方案。

4

1 回答 1

1

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

类型的默认类型ingressClusterIP

在集群内部 IP 上公开服务。选择此值使服务只能从集群内访问。这是默认的服务类型

你希望它的类型是NodePort

在静态端口(NodePort)上公开每个节点 IP 上的服务。将自动创建 NodePort 服务将路由到的 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

于 2017-10-13T13:41:08.907 回答