无法访问Kubernetes服务

3

关于 Kubernetes 的问题:我好像无法从本地机器访问我的服务(Pod 正在 minikube 上运行),当我运行命令 kubectl describe pod pod-id 时,我看到了这两行内容,但我不知道它们是否与无法访问部署有任何关系:

Port:           8888/TCP
Host Port:      0/TCP

但是当我运行时,

kubectl get services

我看不到外部IP地址

NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE
ci-master    NodePort    10.103.13.96   <none>        8888:31388/TCP   1m

这是我的 service.yaml 文件:

apiVersion: v1
kind: Service
metadata:
  name: ci-master
  labels:
    app: ci
    tier: fullstack
    role: master
spec:
  type: NodePort
  ports:
  - port: 8888
    targetPort: 8888
  selector:
    app: ci
    role: master
    tier: fullstack

我认为在我的deployment.yaml中应该与之相关的部分是:

spec:
  template:
    spec:
      containers:
      - name: ci
        image: rand/image-one:latest
        ports:
        - containerPort: 8888

当我尝试使用minikube service ci-master访问服务时,我会无限期地收到以下消息:等待中,服务的端点尚未准备好...

该服务正在提供服务,当我尝试kubectl describe pod pod-id时,我在底部看到了这一行:

  Type    Reason                 Age   From               Message
  Normal  Started                24m   kubelet, minikube  Started container

我错过了什么?

2个回答

6
我所缺少的是服务类型,如果我想让某些东西可以从外部访问,我必须选择LoadBalancer
所以这个简单的更改解决了问题:
spec:
  type: LoadBalancer
  ports:
  - port: 8888
    targetPort: 8888

现在我终于拥有了:
NAME         TYPE           CLUSTER-IP     EXTERNAL-IP     PORT(S)        AGE
ci-master    LoadBalancer   10.15.243.32   35.211.12.22   80:32463/TCP   1m

4

在这个配置里,你的服务运行在8888端口,并且它映射到节点的31388端口。所以你可以在集群内使用8888端口来访问它,在外部世界可以使用31388端口。

关于服务,targetPort是请求发送到的端口,因此它是你的部署的containerPort。这两个始终需要匹配...

...而port是服务端口。所以你的服务可通过10.103.13.96:8888访问。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接