运行 服务在 Kubernetes 中的配置文件不能正常工作
Config file for running service in Kubernetes doesn't work well
我有一个名为 "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 有什么问题吗?
service.yaml
的问题是选择器错误。 How it works 是默认情况下服务将流量路由到具有特定标签的 pods。您的广告连播具有标签 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
我有一个名为 "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 有什么问题吗?
service.yaml
的问题是选择器错误。 How it works 是默认情况下服务将流量路由到具有特定标签的 pods。您的广告连播具有标签 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