为什么可以';我不能在Kubernetes中找到服务发现吗?
我正在创建一个简单的grpc示例,在本地环境中使用Kubernetes 当nodejs使用pythonservice发出请求时,pythonservice使用helloworld进行响应并将其显示在网页上 但是,pythonservice的clusterip是可访问的,但不是为什么可以';我不能在Kubernetes中找到服务发现吗?,kubernetes,coredns,Kubernetes,Coredns,我正在创建一个简单的grpc示例,在本地环境中使用Kubernetes 当nodejs使用pythonservice发出请求时,pythonservice使用helloworld进行响应并将其显示在网页上 但是,pythonservice的clusterip是可访问的,但不是http://pythoservice:8000 coredns可能有问题,所以我检查了各种东西并删除了kube系统的kube dns服务 如果您使用nslookup使用pythonservice.default.svc.c
http://pythoservice:8000
coredns可能有问题,所以我检查了各种东西并删除了kube系统的kube dns服务
如果您使用nslookup使用pythonservice.default.svc.cluster.local
进行检查,您将看到与pythonservice的clusterip不同的地址。
对不起,我英语不好
这是node.js代码:
var setting = 'test';
var express = require('express');
var app = express();
const port = 80;
var PROTO_PATH = __dirname + '/helloworld.proto';
var grpc = require('grpc');
var protoLoader = require('@grpc/proto-loader');
var packageDefinition = protoLoader.loadSync(
PROTO_PATH,
{keepCase: true,
longs: String,
enums: String,
defaults: true,
oneofs: true
});
// http://pythonservice:8000
// 10.109.228.152:8000
// pythonservice.default.svc.cluster.local:8000
// 218.38.137.28
var hello_proto =
grpc.loadPackageDefinition(packageDefinition).helloworld;
function main(callback) {
var client = new hello_proto.Greeter("http://pythonservice:8000",
grpc.credentials.createInsecure());
var user;
if (process.argv.length >= 3) {
user = process.argv[2];
} else {
user = 'world';
}
client.sayHello({name: user}, function(err, response) {
console.log('Greeting:', response.message);
setting = response.message;
});
}
var server = app.listen(port, function () {});
app.get('/', function (req, res) {
main();
res.send(setting);
//res.send(ip2);
//main(function(result){
// res.send(result);
//})
});
这是pythonservice的yaml文件
apiVersion: apps/v1
kind: Deployment
metadata:
name: practice-dp2
spec:
selector:
matchLabels:
app: practice-dp2
replicas: 1
template:
metadata:
labels:
app: practice-dp2
spec:
hostname: appname
subdomain: default-subdomain
containers:
- name: practice-dp2
image: taeil777/greeter-server:v1
ports:
- containerPort: 8000
---
apiVersion: v1
kind: Service
metadata:
name: pythonservice
spec:
type: ClusterIP
selector:
app: practice-dp2
ports:
- port: 8000
targetPort: 8000
这是kubectl获得全部:
root@pusik-server0:/home/tinyos/Desktop/grpc/node# kubectl get all
NAME READY STATUS RESTARTS AGE
pod/practice-dp-55dd4b9d54-v4hhq 1/1 Running 1 68m
pod/practice-dp2-7d4886876-znjtl 1/1 Running 0 18h
NAME TYPE CLUSTER-IP EXTERNAL-IP
PORT(S) AGE
service/kubernetes ClusterIP 10.96.0.1 <none>
443/TCP 34d
service/nodeservice ClusterIP 10.100.165.53 <none>
80/TCP 68m
service/pythonservice ClusterIP 10.109.228.152 <none>
8000/TCP 18h
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/practice-dp 1/1 1 1 68m
deployment.apps/practice-dp2 1/1 1 1 18h
NAME DESIRED CURRENT READY
AGE
replicaset.apps/practice-dp-55dd4b9d54 1 1 1
68m
replicaset.apps/practice-dp2-7d4886876 1 1 1
18h
1。回答第一个问题:
pythonservice的clusterip是可访问的,但不是http://pythoservice:8000
service/pythonservice
的类型是ClusterIP
如果您有兴趣在集群外公开服务,请使用service typeNodePort或LoadBalancer
。根据附带的屏幕,您的应用程序可以从集群内访问(ClusterIP Serie)
2。回答第二个问题:
- 输出
exec失败:container\u linux.go:345:启动容器进程导致“exec:\“nslookup\”:在$PATH中找不到可执行文件:未知命令终止,退出代码126
nslookup
的工具,因此:请使用已安装的工具在同一命名空间中运行一些pod,然后再次验证:
kubectl run ubuntu --rm -it --image ubuntu --restart=Never --command -- bash -c 'apt-get update && apt-get -y install dnsutils && bash'
kubectl exec ubuntu2 -- nslookup pythonservice.default.svc.cluster.local
--更新
请确认所有POD和svc的状态,尤其是kube系统中的状态
命名空间:
kubectl get nodes,pods,svc --all-namespaces -o wide
为了开始调试,请获取有关coredns特定问题f.e.的更多信息,请使用:
kubectl describe pod your coredns_pod -n kube-system
kubectl logs coredns_pod -n kube-system
请参阅:
希望对您有所帮助。1。回答第一个问题:
pythonservice的clusterip是可访问的,但不是http://pythoservice:8000
service/pythonservice
的类型是ClusterIP
如果您有兴趣在集群外公开服务,请使用service typeNodePort或LoadBalancer
。根据附带的屏幕,您的应用程序可以从集群内访问(ClusterIP Serie)
2。回答第二个问题:
- 输出
exec失败:container\u linux.go:345:启动容器进程导致“exec:\“nslookup\”:在$PATH中找不到可执行文件:未知命令终止,退出代码126
nslookup
的工具,因此:请使用已安装的工具在同一命名空间中运行一些pod,然后再次验证:
kubectl run ubuntu --rm -it --image ubuntu --restart=Never --command -- bash -c 'apt-get update && apt-get -y install dnsutils && bash'
kubectl exec ubuntu2 -- nslookup pythonservice.default.svc.cluster.local
--更新
请确认所有POD和svc的状态,尤其是kube系统中的状态
命名空间:
kubectl get nodes,pods,svc --all-namespaces -o wide
为了开始调试,请获取有关coredns特定问题f.e.的更多信息,请使用:
kubectl describe pod your coredns_pod -n kube-system
kubectl logs coredns_pod -n kube-system
请参阅:
希望有此帮助。您需要重新创建用于服务发现的coredns,确保它已启动并正常运行。您可以发布python服务的yaml文件、运行
kubectl get svc
的输出以及nslookup的输出吗?谢谢您的评论。照你说的贴。像在主机上运行nslookup一样练习dp=node js pracice-dp2=pythonSeems?试着在一个舱内跑步。如果127.0.1.1是主机上的DNS服务器,这可能会导致coredns无法启动。看看下面的链接。我试图在pod内运行nslookup,但出现以下错误:------------------------------------------------------------kubectl exec practice-dp-55dd4b9d54-v4hhq--nslookup pythonservice.default.svc.cluster.local OCI runtime exec失败:exec失败:container\u linux.go:345:启动容器进程导致“exec:\”nslookup\“:在$PATH中找不到可执行文件“:未知命令以退出代码126终止------------------然后我在ubuntu环境中通过virtualbox配置了一个集群。1个主节点,1个工作节点您需要重新创建用于服务发现的coredns,确保它已启动并正常运行。您可以发布python服务的yaml文件、运行kubectl get svc
的输出以及nslookup的输出吗?谢谢您的评论。照你说的贴。像在主机上运行nslookup一样练习dp=node js pracice-dp2=pythonSeems?试着在一个舱内跑步。如果127.0.1.1是主机上的DNS服务器,这可能会导致coredns无法启动。看看下面的链接。我试图在pod内运行nslookup,但出现以下错误:------------------------------------------------------------kubectl exec practice-dp-55dd4b9d54-v4hhq--nslookup pythonservice.default.svc.cluster.local OCI runtime exec失败:exec失败:container\u linux.go:345:启动容器进程导致“exec:\”nslookup\“:executable file not found in$PATH”:未知命令终止,退出代码126------------------然后我在ubuntu环境中通过virtualbox配置了一个集群。1个主节点,1个工作节点注释,但在2个节点中,创建ubuntu pod的命令显示错误…我试图通过转到kubectl exec使用nslookup{podname}-ti bash在pod中使用nslookup,但apt get dnsutils未运行。如果要在Dockerfile中安装nslookup,通过在Dockerfile中安装dnsutill,您可以在pod中的容器上使用nslookup。但是我得到以下信息