簡體   English   中英

如何通過kubernetes集群ip訪問服務?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM