我正在尝试使用Kubernetes运行我的应用程序
我从一个名为deployment.yaml的文件中创建了一个部署
来自名为service.yaml的文件中的服务
以下是deployment.yaml的内容:
apiVersion: v1
kind: Pod
Metadata:
name: kubectl-test
spec:
containers:
- name: kubectl-test
image: gcr.io/[my-name]/node-app:0.0.1
imagePullPolicy: Always
ports:
- containerPort: 8080
hostPort: 8080
这是我的services.yaml
kind: Service
apiVersion: v1
Metadata:
#Service name
name: kubectl-test-node-app
spec:
selector:
app: kubectl-test-189010
ports:
- protocol: TCP
port: 8000
targetPort: 8000
type: LoadBalancer
当我运行命令kubectl get deployments时,我可以看到:
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
kubernetes-bootcamp 1 1 1 1 16m
我可以通过使用kubectl获取服务来查看我的服务,我可以看到:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubectl-test-node-app LoadBalancer 10.59.242.211 35.195.2.76 8000:31592/TCP 8m
kubernetes ClusterIP 10.59.240.1
当我尝试访问EXTERNAL-IP:8000时,我无法看到我的应用程序,我没有收到任何错误,但我不会出现问题!
编辑
我必须使用以下方法创建部署:
`kubectl run kubernetes-bootcamp --image=[image-name] --port=8080`
但没有这个命令
`kubectl create -f deployment.yaml`
这与端口有关:8000:31592 / TCP?
kubectl get pods
kubectl-test 1/1 Running 0 4h
kubernetes-bootcamp-1654181842-czwqg 1/1 Running 0 3h
编辑
运行命令kubectl describe services kubectl-test-node-app返回:
Name: kubectl-test-node-app
Namespace: default
Labels:
没有定义端点.我想这是问题所在?我该如何建立终点?
最佳答案
您的服务规范针对所有pod,其标签为“app = kubectl-test-189010”,您的pod的规范没有.
您需要更新pod的元数据,以便它与服务规范中的选择器匹配:
Metadata:
name: kubectl-test
app: kubectl-test-189010
您的服务也接受端口8000上的连接,然后将其转发到pod上的端口8000(targetPort).但pod侦听端口8080(containerPort).因此,应将其中一个更改为匹配另一个 – targetPort或containerPort.
您可以在此处阅读有关在Kubernetes中配置服务的更多信息:https://kubernetes.io/docs/concepts/services-networking/service/