使用相同的URL公开相同的服务,但使用traefik公开两个不同的端口?

时间:2017-10-13 09:43:35

标签: amazon-web-services jenkins kubernetes traefik

最近我试图在中国的AWS上使用Kubernetes v1.7.3和jenkins v2.73.2建立CI / CD流程(GFW阻止dockerhub)。

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

理想情况下,我希望在端口80上公开http://jenkins.mydomain.com作为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,因此slave无法与master连接;使用后一种选项我无法从AWS ECR等私有docker注册表中获取(无法使用provice凭据),因此无法创建slave(imagePullError)。

最后,我真的只是想让jenkins工作(用我的自定义图像创建奴隶,用奴隶构建并在工作完成后删除奴隶),欢迎任何其他解决方案。

1 个答案:

答案 0 :(得分:1)

如果您希望从群集外部访问using String = StringFunctions.Extensions.StringExtensions; namespace StringFunctions { class Program { static void Main(string[] args) { var t = String.Space; } } } ,则需要更改jenkins配置。

默认类型ingress类型为ingress

  

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

您希望其类型为ClusterIP

  

在静态端口(NodePort)上的每个节点的IP上公开服务。将自动创建NodePort服务将路由到的ClusterIP服务。您可以通过请求:

从群集外部联系NodePort服务

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

NodePort