[英]How to access services through kubernetes cluster ip?
我通过kubeadm搭建了一个kubernetes集群,创建了几个服务。 这些服务可以通过节点ip:端口进行外部访问,但是当我尝试通过集群ip访问服务时,却失败了,显示错误信息curl:(7) Failed connect to 10.99.237.89:2379; 连接超时,这个问题怎么解决?
集群相关信息
[root@********** ~]# kubectl describe svc etcd-torus-internal --namespace=default
Name: etcd-torus-internal
Namespace: default
Labels: name=etcd-torus-internal
Selector: name=etcd-torus
Type: ClusterIP
IP: 10.99.237.89
Port: etcd-client 2379/TCP
Endpoints: 10.244.1.10:2379
Session Affinity: None
No events.
[root@********** ~]# curl 10.99.237.89:2379
curl: (7) Failed connect to 10.99.237.89:2379; Connection timed out
[root@********** ~]#
集群 IP 不能从集群外部访问,它们只能在内部访问。
请参阅此处了解更多详情
从集群外部访问集群:
以下是如何从集群外部访问 ClusterIp 服务,使用“kubectl port-forward...”命令: https ://kubernetes.io/docs/tasks/access-application-cluster/port-forward-access-application- 簇/
从 WITH IN CLUSTER 访问 CLUSTERIP:
以下是您如何从集群中访问它,通过使用您可以通过命令 'kubectl get svc -n < ns_name > 获得的 IP 地址:
按照以下方式使用 Flask 在同一命名空间中创建 2 个 API 服务器,并在我的 Minikube 上进行尝试和测试。 在 Kubernetes 中托管第一个作为 ClusterIp 服务。 使用 NodePort 托管第二个以访问 Minikube 集群外部。
第一个服务是使用它在第二个服务中的 ClusterIp 访问的,如下面的 Python 代码所示,我尝试使用服务名称访问但没有工作。
这是第一个flask api服务器(.py文件),它将在第二个flask api服务器中调用:
import flask
from flask import Flask
import json
from flask import request
application = Flask(__name__)
@application.route('/api/v1/square', methods=['GET'])
def square():
# sample api call: http://0.0.0.0:8003/api/v1/square?nb1=11
nb1 = request.args.get('nb1')
sq_nb1 = int(nb1)*int(nb1)
return flask.jsonify(sq_nb1)
if __name__ == '__main__':
application.run(debug=True, host="0.0.0.0", port=8003)
第二个 API 服务器(.py 文件),它调用在 Kubernetes 中作为 ClusterIP 托管的第一个 API 服务器
import flask
from flask import Flask
import json
from flask import request
import requests
application = Flask(__name__)
@application.route('/api/v1/sumsq', methods=['GET'])
def sumSq():
# sample api call: http://0.0.0.0:8002/api/v1/sumsq?nb1=111&nb2=222
nb1 = request.args.get('nb1')
nb2 = request.args.get('nb2')
sum_val = int(nb1) + int(nb2)
# call square micro-service (Svc: 3-Internal-API-Server)
api_url = "http://10.96.55.98/api/v1/square?nb1={v}".format(v=sum_val)
# get IP using 'kubectl get svc -n <ns_name>' command
res = requests.get(url=api_url)
sum_sq_val = res.json()
return flask.jsonify(sum_sq_val)
if __name__ == '__main__':
application.run(debug=True, host="0.0.0.0", port=8002)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.