如何解决Kubernetes 服务无法获取外部 IP [已解决] Kubernetes 服务无法获取外部 IP此问题中存在的问题
服务是external-ip,无法绑定外部端口。我已经运行命令尝试查找端口。
minikube 服务 mongodb-express-service
环境
- Minikube
- Oracle Virtual Box
- Ubuntu 20.04
mongo-express.yaml
apiVersion: apps/v1
kind: Deployment
Metadata:
name: mongo-express
labels:
app: mongo-express
spec:
replicas: 1
selector:
matchLabels:
app: mongo-express
template:
Metadata:
labels:
app: mongo-express
spec:
containers:
- name: mongo-express
image: mongo-express
ports:
- containerPort: 8081
env:
- name: ME_CONfig_MONGODB_ADMINUSERNAME
valueFrom:
secretKeyRef:
name: mongodb-secret
key: username
- name: ME_CONfig_MONGODB_ADMINPASSWORD
valueFrom:
secretKeyRef:
name: mongodb-secret
key: password
- name: ME_CONfig_MONGODB_SERVER
valueFrom:
configMapKeyRef:
name: mongodb-config-map
key: database_url
---
apiVersion: v1
kind: Service
Metadata:
name: mongodb-express-service
spec:
selector:
app: mongodb-express-service
type: LoadBalancer
ports:
- protocol: TCP
port: 8081
targetPort: 8081
nodePort: 30001
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 14d
mongodb-express-service LoadBalancer 10.106.190.5 <pending> 8081:30001/TCP 2d3h
mongodb-service ClusterIP 10.110.241.194 <none> 27017/TCP 3d23h
mongo-express-85bdd6688f-mhv2x 1/1 Running 2 2d3h
mongodb-deployment-7f79c5f88f-h9dvf 1/1 Running 2 2d3h
解决方法
无法连接的原因是@DawidKruk 指出服务和部署具有不同的选择器应用名称。
,您的应用程序中缺少一些资源。如果您已经创建了它,请与我的验证。否则创建它。
1:创建Configmap资源
apiVersion: v1
kind: ConfigMap
metadata:
name: mongodb-config-map
data:
database_url: mongodb-service
2: 创建 Secret 资源
apiVersion: v1
kind: Secret
metadata:
name: mongodb-secret
type: Opaque
data:
username: dXNlcm5hbWU=
password: cGFzc3dvcmQ=
3: 在终端上
minikube service mongodb-express-service
以下是我的终端的输出,您可能会有所不同。
|-----------|-------------------------|-------------|---------------------------|
| NAMESPACE | NAME | TARGET PORT | URL |
|-----------|-------------------------|-------------|---------------------------|
| default | mongodb-express-service | 8081 | http://192.168.49.2:30001 |
|-----------|-------------------------|-------------|---------------------------|
? Starting tunnel for service mongodb-express-service.
|-----------|-------------------------|-------------|------------------------|
| NAMESPACE | NAME | TARGET PORT | URL |
|-----------|-------------------------|-------------|------------------------|
| default | mongodb-express-service | | http://127.0.0.1:53898 |
|-----------|-------------------------|-------------|------------------------|
? Opening service default/mongodb-express-service in default browser...
这应该可以解决您的问题。
,发布此答案以提供有关 2 个主题的更多参考:
- Kubernetes 服务无法获取外部 IP
- 此问题中存在的问题
Kubernetes 服务无法获取外部 IP
Service
类型为 LoadBalancer
:
在外部使用云提供商的负载平衡器公开服务。 NodePort
和 ClusterIP
服务(外部负载平衡器路由到的服务)是自动创建的。
在像 minikube
这样的 Kubernetes 解决方案中,您不会摆脱与 External IP
类型 Service
相关联的 LoadBalancer
。您不需要 External IP
来连接到您的 Services
。您可以通过任一连接到您的 Services
:
- 使用
NodePort
($ minikube service xyz
正在使用它) - 使用
$ minikube tunnel
(这将“分配”External IP
) -
Virtualbox
具体:- 使用
metallb
(load-balancer implementation for bare metal Kubernetes clusters) 从仅主机网络适配器与LoadBalancers
一起使用的子网中为您的minikube
分配范围。
- 使用
此问题中存在的问题
问题中存在的问题与 Service
.spec.selector
和 Deployment
.spec.selector.matchLabels
之间的不匹配有关。
检查您的 selector
是否配置正确的最简单方法(除了查看 YAML
清单)是:
$ kubectl get endpoints
NAME ENDPOINTS AGE
kubernetes A.B.C.D:443 28m
nginx --> 10.32.0.13:80 <-- 5s
免责声明!
当 endpoint
处于 Pod
状态和 Running
时,将出现 Ready
。
如果 nginx
(Service
名称) endpoints
为空,则可能意味着选择器不匹配或 Pod
(CrashLoopBackOff
,{{1 }} 等)。
您也可以通过以下方式检查:
-
Pending
$ kubectl describe svc SERVICE_NAME 字段 -
Endpoints
$ kubectl describe endpoints SERVICE_NAME 字段
其他资源:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。