我正在尝试使用 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 get services 查看我的服务我可以看到:
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 <none> 443/TCP 1d
当我尝试访问 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: <none>
Annotations: <none>
Selector: app=kubectl-test-189010
Type: LoadBalancer
IP: 10.59.242.211
LoadBalancer Ingress: 35.195.2.76
Port: <unset> 8000/TCP
TargetPort: 8000/TCP
NodePort: <unset> 31592/TCP
Endpoints: <none>
Session Affinity: None
External Traffic Policy: Cluster
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal CreatingLoadBalancer 58m service-controller Creating load balancer
Normal CreatedLoadBalancer 57m service-controller Created load balancer
没有定义端点。我想这是问题吗?我怎样才能建立端点?
Best Answer-推荐答案
您的服务规范针对所有带有标签“app=kubectl-test-189010”的 pod,而您的 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/
关于docker - Kubernetes 在给定的 IP 上看不到我的应用程序,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/47831550/
|