Wil*_*bok 7 cluster-computing kubernetes kubectl
目前,我在K8s服务中使用K8s API pod,该服务连接到K8s Redis服务,其中有K8s pod.问题是,我使用NodePort意味着BOTH暴露给公众.我只希望API可以访问公众.问题是如果我将Redis服务不公开,API就无法看到它.有没有办法连接两个服务而不向公众公开?
这是我的API服务yaml:
apiVersion: v1
kind: Service
metadata:
name: app-api-svc
spec:
selector:
app: app-api
tier: api
ports:
- protocol: TCP
port: 5000
nodePort: 30400
type: NodePort
Run Code Online (Sandbox Code Playgroud)
这是我的Redis服务yaml:
apiVersion: v1
kind: Service
metadata:
name: app-api-redis-svc
spec:
selector:
app: app-api-redis
tier: celery_broker
ports:
- protocol: TCP
port: 6379
nodePort: 30537
type: NodePort
Run Code Online (Sandbox Code Playgroud)
首先,将Redis服务配置为ClusterIP服务。它是私有的,仅对其他服务可见。这可以通过使用option删除行来完成type。
apiVersion: v1
kind: Service
metadata:
name: app-api-redis-svc
spec:
selector:
app: app-api-redis
tier: celery_broker
ports:
- protocol: TCP
port: 6379
targetPort: [the port exposed by the Redis pod]
Run Code Online (Sandbox Code Playgroud)
最后,当您配置API以访问Redis时,地址应为 app-api-redis-svc:6379
就这样。我有很多服务都以这种方式相互交流。如果这对您不起作用,请在评论中告诉我。
我将尝试从所有答案和我自己的研究中发挥最大作用,并制作一个简短的指南,希望对您有所帮助:
连接到不同的 pod,例如 ruby pod:
kubectl exec -it some-pod-name -- /bin/sh
Run Code Online (Sandbox Code Playgroud)
验证它可以 ping 到有问题的服务:
ping redis
Run Code Online (Sandbox Code Playgroud)
它可以连接到端口吗?(我发现 telnet 对此不起作用)
nc -zv redis 6379
Run Code Online (Sandbox Code Playgroud)
如果您的服务配置如下所示:
kind: Service
apiVersion: v1
metadata:
name: redis
labels:
app: redis
role: master
tier: backend
spec:
ports:
- port: 6379
targetPort: 6379
selector:
app: redis
role: master
tier: backend
Run Code Online (Sandbox Code Playgroud)
验证这些选择器是否也设置在您的 pod 上?
get pods --selector=app=redis,role=master,tier=backend
Run Code Online (Sandbox Code Playgroud)
通过运行以下命令确认您的服务已绑定到您的 Pod:
$> describe service redis
Name: redis
Namespace: default
Labels: app=redis
role=master
tier=backend
Annotations: <none>
Selector: app=redis,role=master,tier=backend
Type: ClusterIP
IP: 10.47.250.121
Port: <unset> 6379/TCP
Endpoints: 10.44.0.16:6379
Session Affinity: None
Events: <none>
Run Code Online (Sandbox Code Playgroud)
检查该Endpoints:字段并确认它不是空白
更多信息请访问:https : //kubernetes.io/docs/tasks/debug-application-cluster/debug-service/#my-service-is-missing-endpoints
| 归档时间: |
|
| 查看次数: |
5267 次 |
| 最近记录: |