如何在浏览器中访问Kubernetes NodePort服务?

时间:2018-01-14 19:24:47

标签: jenkins service kubernetes google-cloud-platform

我在Kubernetes为jenkins创建了一个部署。 pod运行正常,我已经创建了一个服务来访问service-ip:8080上的jenkins,但似乎无法正常工作。 当我在服务之上创建ingress时,我可以使用public 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上的窗格也不起作用。

1 个答案:

答案 0 :(得分:5)

如果我理解正确,您希望群集中运行的任何容器都能够访问您的jenkins服务,但您不希望您的群集外的jenkins服务可以访问您的浏览器吗?

在这种情况下:

curl http://jenkins-ui.default:8080
curl http://10.47.10.xx:8080

可以在kubernetes群集中的任何容器 内完美地运行

此外,您无法从群集外部访问10.47.10.xx:8080,因为该IP仅在您的kubernetes群集中有效/可用。

如果您想从群集外部访问它,则需要在http://<node-ip>: 30960上连接入口控制器或连接到jenkins-ui k8s服务,从而连接到它后面的容器。

编辑:使用kubectl port-forward

在开发模式下,如果要访问内部运行的容器,可以使用kubectl port-forward

kubectl port-forward <jenkins-ui-pod> 9090:8080

这样,http://localhost:9090将显示jenkins-ui屏幕,因为您有kubectl访问权限。

kubectl port-forward不适用于服务:https://github.com/kubernetes/kubernetes/issues/15180