最近我试图在中国的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-cloud和kubernetes。 使用前一个选项我无法配置jenkins-tunnel URL,因此slave无法与master连接;使用后一种选项我无法从AWS ECR等私有docker注册表中获取(无法使用provice凭据),因此无法创建slave(imagePullError)。
最后,我真的只是想让jenkins工作(用我的自定义图像创建奴隶,用奴隶构建并在工作完成后删除奴隶),欢迎任何其他解决方案。
答案 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