1

我有一个名为“pod.yaml”的配置文件,用于制作如下所示的 pod:

apiVersion: v1 kind: Pod metadata: name: myapp labels: app: myapp spec: containers: - name: comet-app image: gcr.io/my-project/my-app:v2 ports: - containerPort: 5000

以及一个名为“service.yaml”的配置文件,用于在该“myapp”pod 中运行服务。

apiVersion: v1 kind: Service metadata: name: myapp spec: type: LoadBalancer ports: - protocol: TCP port: 80 targetPort: 5000 selector: run: myapp

当我跑

 kubectl apply -f pod.yaml
 kubectl apply -f service.yaml

“myapp”服务已创建,但我无法通过内部 ip 访问我的网站,它返回 ERR_CONNECTION_TIMED_OUT。

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.xx.xxx.1 <none> 443/TCP 11d myapp LoadBalancer 10.xx.xxx.133 35.xxx.xx.172 80:30273/TCP 3s

但是当我删除该服务并通过使用以下命令公开服务重新运行时,一切正常,我可以通过外部 IP 访问我的网站。

 kubectl expose pod myapp  --type=LoadBalancer --port=80 --target-port=5000

谁能为我解释一下并告诉我我的 service.yaml 有什么问题?

4

1 回答 1

3

问题service.yaml在于选择器错误。它的工作原理是默认情况下,服务将流量路由到具有特定标签的 pod。您的 pod 具有标签app: myapp,而在服务中您的选择器是run: myapp. 因此,更改service.yaml为以下内容应该可以解决问题:

apiVersion: v1
kind: Service
metadata:
  name: myapp
spec:
  type: LoadBalancer
  ports:
  - protocol: TCP
    port: 80
    targetPort: 5000
  selector:
    app: myapp
于 2018-07-23T10:17:02.603 回答