Я прочитал, что мне нужно запустить другую службу в пространстве имен B, которая отображается на службу пространства имен A loadbalancer. (Вы можете увидеть эту услугу на моем yaml b).
Я не хочу использовать внешние IP-адреса, предоставляемые балансировщиком нагрузки (Если мой сценарий был реплицирован в облаке с использованием облака GCP / Azure / AWS / IBM /OpenShift).
Я развернул следующий сценарий, используя minikube v1.6.2 и Kubernetes v1.17 :
Пространство имен a:
deployment/python-hello-world READY: 1/1
service/python-hello-world
TYPE: Loadbalancer CLUSTER-IP: 10.96.167.227 EXT-IP: <pending> PORTS: 80:31603/TCP
Пространство имен b:
deployment/python-hello-world READY: 1/1
service/python-hello-world
TYPE: Loadbalancer CLUSTER-IP: 10.96.67.10 EXT-IP: <pending> PORTS: 80:31595/TCP
service/connection
TYPE: ExternalName CLUSTER-IP: <none> EXTERNAL-IP: python-hello-world-external.a.svc.cluster.local PORT: 31603/TCP
Kubernetes yaml a :
apiVersion: apps/v1
kind: Deployment
metadata:
name: python-hello-world
namespace: a
spec:
replicas: 1
selector:
matchLabels:
app: python-hello-world
template:
metadata:
labels:
app: python-hello-world
spec:
containers:
- name: server
image: python-hello-world
ports:
- containerPort: 9090
env:
- name: PORT
value: "9090"
---
apiVersion: v1
kind: Service
metadata:
name: python-hello-world-external
namespace: a
spec:
type: LoadBalancer
selector:
app: python-hello-world
ports:
- name: http
port: 80
targetPort: 9090
Kubernetes yaml b :
apiVersion: apps/v1
kind: Deployment
metadata:
name: python-hello-world
namespace: b
spec:
replicas: 1
selector:
matchLabels:
app: python-hello-world
template:
metadata:
labels:
app: python-hello-world
spec:
containers:
- name: server
image: python-hello-world
ports:
- containerPort: 9091
env:
- name: PORT
value: "9091"
---
apiVersion: v1
kind: Service
metadata:
name: python-hello-world-external
namespace: b
spec:
type: LoadBalancer
selector:
app: python-hello-world
ports:
- name: http
port: 80
targetPort: 9091
---
apiVersion: v1
kind: Service
metadata:
name: connection
namespace: b
spec:
type: ExternalName
externalName: python-hello-world-external.a.svc.cluster.local
ports:
- port: 31603
Для доступа к API A в моем браузере Я запустил в терминале:
$ minikube service python-hello-world-external -n a
|-----------|-----------------------------|-------------|-----------------------------|
| NAMESPACE | NAME | TARGET PORT | URL |
|-----------|-----------------------------|-------------|-----------------------------|
| a | python-hello-world-external | http | http://192.168.39.196:31603 |
|-----------|-----------------------------|-------------|-----------------------------|
Для доступа к API B :
$ minikube service python-hello-world-external -n b
|-----------|-----------------------------|-------------|-----------------------------|
| NAMESPACE | NAME | TARGET PORT | URL |
|-----------|-----------------------------|-------------|-----------------------------|
| b | python-hello-world-external | http | http://192.168.39.196:31595 |
|-----------|-----------------------------|-------------|-----------------------------|
Flask API A :
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return "Hello World A"
if __name__ == '__main__':
app.run(debug=False, port=9090, host='0.0.0.0')
Flask API B :
import requests
from flask import Flask
app = Flask(__name__)
@app.route('/a')
def call_a():
response = requests.get("I DONT KNOW WHAT TO PUT HERE")
return response
if __name__ == '__main__':
app.run(debug=False, port=9091, host='0.0.0.0')
- Можно ли отправить запрос внутренне с помощью minikube?
- Если да, то что-то не хватает в моей конфигурации?
- Если это так, какой URL-адрес я пишу в запросах .get ("")?