最近我正在尝试在中国的 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-cloud和kubernetes。使用前一个选项我无法配置 jenkins-tunnel URL,因此从站无法与主站连接;使用后一个选项,我无法从 AWS ECR 等私有 docker 注册表中提取(没有地方提供凭证),因此无法创建从属(imagePullError)。
最后,实际上我只是想让 jenkins 工作(使用我的自定义映像创建从站,使用从站构建并在作业完成后删除从站),欢迎任何其他解决方案。