我正在使用minikube在最新的MacOS上测试kubernetes。
以下是我相关的YAML:
namespace.yml
apiVersion: v1
kind: Namespace
metadata:
name: micro
labels:
name: micro
deployment.yml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: adderservice
spec:
replicas: 1
template:
metadata:
labels:
run: adderservice
spec:
containers:
- name: adderservice
image: jeromesoung/adderservice:0.0.1
ports:
- containerPort: 8080
service.yml
apiVersion: v1
kind: Service
metadata:
name: adderservice
labels:
run: adderservice
spec:
ports:
- port: 8080
name: main
protocol: TCP
targetPort: 8080
selector:
run: adderservice
type: NodePort
运行minikube start
之后,我执行的部署步骤如下:
kubectl create -f namespace.yml
创建名称空间
kubectl config set-context minikube --namespace=micro
kubectl create -f deployment.yml
kubectl create -f service.yml
然后,我使用以下命令获取NodeIP和NodePort:
kubectl get services
获取NodePort $ kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
adderservice NodePort 10.99.155.255 <none> 8080:30981/TCP 21h
minikube ip
获取nodeIP $ minikube ip
192.168.99.103
但是当我卷曲时,总是会得到拒绝连接,如下所示:
$ curl http://192.168.99.103:30981/add/1/2
curl: (7) Failed to connect to 192.168.99.103 port 30981: Connection refused
因此,我检查了节点,吊舱,部署和端点,如下所示:
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
minikube Ready master 23h v1.13.3
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
adderservice-5b567df95f-9rrln 1/1 Running 0 23h
$ kubectl get deployments
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
adderservice 1 1 1 1 23h
$ kubectl get endpoints
NAME ENDPOINTS AGE
adderservice 172.17.0.5:8080 21h
我还通过以下方式检查了minikube的服务列表:
$ minikube service -n micro adderservice --url
http://192.168.99.103:30981
我已经阅读了许多有关通过NodePorts访问k8s服务的文章。据我所知,我应该能够毫无问题地访问该应用程序。我唯一怀疑的是我正在使用自定义名称空间。这会导致访问问题吗?
我知道名称空间会更改DNS,因此,为完整起见,我还运行了以下命令:
$ kubectl exec -ti adderservice-5b567df95f-9rrln -- nslookup kubernetes.default
Server: 10.96.0.10
Address: 10.96.0.10#53
Name: kubernetes.default.svc.cluster.local
Address: 10.96.0.1
$ kubectl exec -ti adderservice-5b567df95f-9rrln -- nslookup kubernetes.micro
Server: 10.96.0.10
Address: 10.96.0.10#53
Non-authoritative answer:
Name: kubernetes.micro
Address: 198.105.244.130
Name: kubernetes.micro
Address: 104.239.207.44
有人可以帮我吗?谢谢。
答案 0 :(得分:0)
检查服务是否真的在8080上监听。
在容器内尝试telnet。
telnet 127.0.0.1 8080
.
.
.
telnet 172.17.0.5 8080
答案 1 :(得分:0)
@ aakash-sharma
root@adderservice-5b567df95f-9rrln:/home/node/service# netstat -ltnpau
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp6 0 0 :::38641 :::* LISTEN 1/node
root@adderservice-5b567df95f-9rrln:/home/node/service# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 2.2 574852 46764 ? Ssl Mar04 0:00 node index.js
root 504 0.0 0.1 18196 3256 pts/0 Ss 06:58 0:00 bash
root 827 0.0 0.1 36640 2800 pts/0 R+ 07:03 0:00 ps aux
在简单的应用服务器中,它读取由K8S注入的全局env变量,如下所示:
const restify = require('restify');
function wiring(service) {
const server = restify.createServer();
const { ADDERSERVICE_SERVICE_HOST, ADDERSERVICE_SERVICE_PORT } = process.env;
server.get('/add/:first/:second', (req, res, next) => {
service.add(req.params, (err, result) => {
if (err) {
res.send(err);
next();
return;
}
res.send(200, result);
next();
});
});
server.listen(ADDERSERVICE_SERVICE_PORT, ADDERSERVICE_SERVICE_HOST, () => {
console.log('%s listening at %s', server.name, server.url);
});
}
ADDERSERVICE_SERVICE_PORT 不应该成为服务YAML中定义的那个吗?
答案 2 :(得分:0)
错误Connection Refused
主要表示容器内的应用程序不接受目标接口上的请求或未通过预期端口映射。
您需要注意的事项:
0.0.0.0
,以便它可以从容器外部(如在公共场所或通过其他容器)接收来自容器外部的请求。containerPort
和targetPort
在您的情况下,必须确保ADDERSERVICE_SERVICE_HOST
等于0.0.0.0
,并且ADDERSERVICE_SERVICE_PORT
等于8080
,该值应与targetPort
中的service.yml
和containerPort
答案 3 :(得分:0)
没有回答这个问题,但是谷歌搜索引擎是否也像我一样遇到了同样的问题。这是我针对相同问题的解决方案。
我的Mac系统IP和minikube IP不同。
因此localhost:port无效,请尝试获取IP
minikube ip
稍后,使用该IP:Port访问该应用,它便可以正常工作。