【发布时间】:2018-06-23 12:18:50
【问题描述】:
我在 Kubernetes 中为 jenkins 创建了一个部署。
pod 运行良好,我创建了一个服务来访问 service-ip:8080 上的 jenkins,但它似乎不起作用。
当我在服务上方创建ingress 时,我可以使用公共 ip 访问它。
kind: Service
apiVersion: v1
metadata:
name: jenkins-ui
namespace: jenkins
spec:
type: NodePort
selector:
app: jenkins
ports:
- protocol: TCP
port: 8080
targetPort: 8080
name: ui
我如上所述创建了我的服务:
$ kubectl get svc --namespace=jenkins
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
jenkins-ui NodePort 10.47.xx.xx <none> 8080:30960/TCP 1d
我尝试访问:10.47.xx.xx:8080,但我无法访问 jenkins UI。我究竟做错了什么?我也试过10.47.xx.xx:30960
我想使用服务访问我的 jenkins UI,但我想在我的集群中保持私有。 (入口使其公开)。
更新:
$ kubectl describe svc jenkins-ui --namespace jenkins
Name: jenkins-ui
Namespace: jenkins
Labels: <none>
Annotations: <none>
Selector: app=jenkins
Type: NodePort
IP: 10.47.xx.xx Port: ui 8080/TCP
TargetPort: 8080/TCP
NodePort: ui 30960/TCP
Endpoints: 10.44.10.xx:8080
Session Affinity: None
External Traffic Policy: Cluster
Events: <none>
访问 10.44.10.xx:8080 上的 pod 也不起作用。
【问题讨论】:
-
你能用
kubectl describe svc jenkins-ui的回复更新你的问题吗?我想知道服务背后是否有端点。 -
@fiunchinho 已更新
-
谢谢。您是否尝试从集群内运行的 pod 进行连接?提出这些要求的情况如何?
-
当您创建 NodePort
Service时,您应该能够使用地址 public_node_ip:NodePort 访问在服务后面运行的 pod。因此,您需要其中一个节点的公共 IP,而不是ServiceIP,后者的内部 IP 为 10.47.xx.xx,只能从同一本地网络(集群)访问。 -
在节点中设置防火墙以仅允许您的本地 IP 地址(您的公司办公室)。如果你只想访问这个jenkins实例用于开发目的,你总是可以使用
kubectl内置端口转发kubernetes.io/docs/tasks/access-application-cluster/…
标签: jenkins service kubernetes google-cloud-platform