我正在使用minikube来测试本地Kubernetes场景。我有两个名为“ frontend.py”和“ interceptor.py”的Python Flask应用程序。基本上,我想对前端应用程序进行GET,然后将其执行到拦截器应用程序的POST,并从拦截器接收回响应。如果我手动找到拦截器应用程序的IP并将其提供在我的'frontend.py'脚本中,则可以正常工作。
我的问题:是否存在一种建议的方法,该方法可以从另一个Pod容器中的应用程序自动确定在一个Pod容器中运行的应用程序的IP地址?
我想知道是否还有其他方法可以通过我创建的Kubernetes Service将pod的信息彼此公开,但是我还没有还没有运气。
以下是我的服务和部署。
flask-frontend-deployment.yaml
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
name: frontend-deployment
labels:
app: flask
spec:
selector:
matchLabels:
app: flask
replicas: 1
template:
metadata:
labels:
app: flask
tier: frontend
spec:
containers:
- name: flask-frontend
image: alec/flask/frontend:1.0
resources:
requests:
cpu: 100m
memory: 100Mi
env:
- name: GET_HOSTS_FROM
value: dns
ports:
- containerPort: 5001
flask-frontend-service.yaml
apiVersion: v1
kind: Service
metadata:
name: frontend-service
spec:
type: NodePort
selector:
app: flask
ports:
- protocol: TCP
port: 5001
targetPort: 5001
flask-interceptor-deployment.yaml
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
name: interceptor-deployment
labels:
app: flask
spec:
selector:
matchLabels:
app: inter
role: mid
tier: middle
replicas: 1
template:
metadata:
labels:
app: inter
role: mid
tier: middle
spec:
containers:
- name: flask-interceptor
image: alec/flask/interceptor:1.0
resources:
requests:
cpu: 100m
memory: 100Mi
env:
- name: GET_HOSTS_FROM
value: env
ports:
- containerPort: 5002
flask-interceptor-service.yaml
apiVersion: v1
kind: Service
metadata:
name: interceptor-service
spec:
ports:
- protocol: TCP
port: 5002
frontend.py
from flask import Flask
from flask import request
import requests
app = Flask(__name__)
@app.route("/")
def hello():
address = 'http://172.17.0.5:5002/' #<--- this is the IP I want to get automatically
r = requests.post(address, data="---[Token]---")
return "Frontend Here. Response from Backend = "+str(r.content)
if __name__ == "__main__":
app.run(debug=True,host='0.0.0.0',port=5001)
interceptor.py
from flask import Flask
from flask import request
import requests
app = Flask(__name__)
content = ""
@app.route("/", methods=['POST'])
def testPost():
if request.method == 'POST':
return "Received POST --->>> " + str(request.data)
else:
return "Post didnt work"
@app.route("/", methods=['GET'])
def hello():
return "Hello from the interceptor!"
if __name__ == "__main__":
app.run(debug=True,host='0.0.0.0',port=5002)
答案 0 :(得分:2)
只要在@Override
public void onBackPressed() {
if (getFragmentManager().getBackStackEntryCount() > 0) {
if(getFragmentManager().findFragmentById(R.id.ad_container) instanceof FragmentE) {
getFragmentManager().popBackStack();
getFragmentManager().popBackStack();
getFragmentManager().popBackStack();
// pop fragment D,C from backstack
// navigate to fragment B
}
} else {
super.onBackPressed();
}
}
中启用了kube-dns
加载项,您就应该能够执行基于DNS的服务发现。我会说这是获取资源IP地址的推荐方法。
要再次检查您是否启用了minikube
,请运行kube-dns
,默认情况下应启用它。
为您创建的DNS名称将默认来自资源的minikube addons list
字段。假设您将使用metadata: name
名称空间,那么您的服务DNS名称将是:
default
和
interceptor-service.default.svc.cluster.local
您可以在应用程序中使用这些完全限定的域名来访问服务,也可以使用较短的版本,例如frontend-service.default.svc.cluster.local
原样。之所以可以这样做是因为您的Pod frontend-service
将配置为在查询resolv.conf
时在default.svc.cluster.local
中查找。
要对此进行测试(并在注释中注明),您现在应该可以更改此行:
frontend-service
到
address = 'http://172.17.0.5:5002/'
在您的Flask应用代码中。
有关Kubernetes中用于服务和Pod的DNS的更多详细信息,请参见this页。