我在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上的窗格也不起作用。
答案 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