如何在 BareMetal -KinD 中使用 LoadBalancer?
How can I use LoadBalancer in BareMetal -KinD?
我的问题非常简单,与名为 KinD 的 kubernetes 很棒的工具有关。我正在为我的烧瓶应用程序使用 KinD:
import os
import requests
from flask import Flask
from jaeger_client import Config
from flask_opentracing import FlaskTracing
app = Flask(__name__)
config = Config(
config={
'sampler':
{'type': 'const',
'param': 1},
'logging': True,
'reporter_batch_size': 1,},
service_name="service")
jaeger_tracer = config.initialize_tracer()
tracing = FlaskTracing(jaeger_tracer, True, app)
def get_counter(counter_endpoint):
counter_response = requests.get(counter_endpoint)
return counter_response.text
def increase_counter(counter_endpoint):
counter_response = requests.post(counter_endpoint)
return counter_response.text
@app.route('/')
def hello_world():
counter_service = os.environ.get('COUNTER_ENDPOINT', default="https://localhost:5000")
counter_endpoint = f'{counter_service}/api/counter'
counter = get_counter(counter_endpoint)
increase_counter(counter_endpoint)
return f"""Hello, World!
You're visitor number {counter} in here!\n\n"""
FROM python:3.7-alpine
RUN mkdir /app
RUN apk add --no-cache py3-pip python3 && \
pip3 install flask Flask-Opentracing jaeger-client
WORKDIR /app
ADD ./app /app/
ADD ./requirements.txt /app/
RUN pip install -r requirements.txt
EXPOSE 5000
CMD ["python", "/app/main.py"]
deployment.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-flask-deployment
spec:
selector:
matchLabels:
app: my-flask-pod
replicas: 2
template:
metadata:
labels:
app: my-flask-pod
spec:
containers:
- name: my-flask-container
image: yusufkaratoprak/awsflaskeks:latest
resources:
limits:
memory: "128Mi"
cpu: "500m"
ports:
- containerPort: 5000
service.yaml
apiVersion: v1
kind: Service
metadata:
name: my-flask-service
spec:
selector:
app: my-flask-pod
ports:
- port: 6000
targetPort: 5000
type: LoadBalancer
status:
loadBalancer:
ingress:
- ip: 203.0.113.10
Configmap.yaml:
apiVersion: v1
kind: ConfigMap
metadata:
namespace: metallb-system
name: config
data:
config: |
address-pools:
- name: default
protocol: layer2
addresses:
- 172.42.42.100-172.42.42.105 #Update this with your Nodes IP range
结果:
一切看起来都很好。当我写我的浏览器时:http://172.42.42.101:6000/
结果:
此外,我想添加我的服务事件。一切看起来都不错:
我还想添加@Kaan Mersin 建议:我添加了 80 作为默认端口。
实际上,对于裸机服务器,您应该使用除 LoadBalancer 之外的其他解决方案来公开您的应用程序,例如 NodePort、Ingress 等。因为 LoadBalancer 服务类型仅适用于 Google、Azure、AWS 等云提供商
查看 LoadBalancer
的官方文档
按照以下方式,认为您使用的是 NodePort 而不是 LoadBalancer,NodePort 服务类型也在 pods 之间负载平衡流量如果您只是期待平衡功能;
您需要从 运行 正在运行容器的主机外部使用 http://172.42.42.101:30160。端口 6000 只能在集群内部使用内部 IP 访问(10.96.244.204 在您的情况下)。每当您公开您的部署时,自动(您也可以手动定义)NodePort 之一(默认在 30000 - 32767 之间)分配给外部请求的服务。
有关服务详情,您需要运行以下命令。命令输出将为您提供 NodePort 和其他详细信息。
kubectl describe services my-service
请查看相关kubernetes documentation
Chrome 抛出的错误是 ERR_UNSAFE_PORT
。将您的 Service
端口更改为 80
,然后在 SuperUser 上点击 http://172.42.42.101/. Alternatively you can choose any other port you like so long as Chrome doesn't consider it an unsafe port. See this answer 以获取不安全端口列表。
我的问题非常简单,与名为 KinD 的 kubernetes 很棒的工具有关。我正在为我的烧瓶应用程序使用 KinD:
import os
import requests
from flask import Flask
from jaeger_client import Config
from flask_opentracing import FlaskTracing
app = Flask(__name__)
config = Config(
config={
'sampler':
{'type': 'const',
'param': 1},
'logging': True,
'reporter_batch_size': 1,},
service_name="service")
jaeger_tracer = config.initialize_tracer()
tracing = FlaskTracing(jaeger_tracer, True, app)
def get_counter(counter_endpoint):
counter_response = requests.get(counter_endpoint)
return counter_response.text
def increase_counter(counter_endpoint):
counter_response = requests.post(counter_endpoint)
return counter_response.text
@app.route('/')
def hello_world():
counter_service = os.environ.get('COUNTER_ENDPOINT', default="https://localhost:5000")
counter_endpoint = f'{counter_service}/api/counter'
counter = get_counter(counter_endpoint)
increase_counter(counter_endpoint)
return f"""Hello, World!
You're visitor number {counter} in here!\n\n"""
FROM python:3.7-alpine
RUN mkdir /app
RUN apk add --no-cache py3-pip python3 && \
pip3 install flask Flask-Opentracing jaeger-client
WORKDIR /app
ADD ./app /app/
ADD ./requirements.txt /app/
RUN pip install -r requirements.txt
EXPOSE 5000
CMD ["python", "/app/main.py"]
deployment.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-flask-deployment
spec:
selector:
matchLabels:
app: my-flask-pod
replicas: 2
template:
metadata:
labels:
app: my-flask-pod
spec:
containers:
- name: my-flask-container
image: yusufkaratoprak/awsflaskeks:latest
resources:
limits:
memory: "128Mi"
cpu: "500m"
ports:
- containerPort: 5000
service.yaml
apiVersion: v1
kind: Service
metadata:
name: my-flask-service
spec:
selector:
app: my-flask-pod
ports:
- port: 6000
targetPort: 5000
type: LoadBalancer
status:
loadBalancer:
ingress:
- ip: 203.0.113.10
Configmap.yaml:
apiVersion: v1
kind: ConfigMap
metadata:
namespace: metallb-system
name: config
data:
config: |
address-pools:
- name: default
protocol: layer2
addresses:
- 172.42.42.100-172.42.42.105 #Update this with your Nodes IP range
结果:
一切看起来都很好。当我写我的浏览器时:http://172.42.42.101:6000/
结果:
此外,我想添加我的服务事件。一切看起来都不错:
我还想添加@Kaan Mersin 建议:我添加了 80 作为默认端口。
实际上,对于裸机服务器,您应该使用除 LoadBalancer 之外的其他解决方案来公开您的应用程序,例如 NodePort、Ingress 等。因为 LoadBalancer 服务类型仅适用于 Google、Azure、AWS 等云提供商
查看 LoadBalancer
的官方文档按照以下方式,认为您使用的是 NodePort 而不是 LoadBalancer,NodePort 服务类型也在 pods 之间负载平衡流量如果您只是期待平衡功能;
您需要从 运行 正在运行容器的主机外部使用 http://172.42.42.101:30160。端口 6000 只能在集群内部使用内部 IP 访问(10.96.244.204 在您的情况下)。每当您公开您的部署时,自动(您也可以手动定义)NodePort 之一(默认在 30000 - 32767 之间)分配给外部请求的服务。
有关服务详情,您需要运行以下命令。命令输出将为您提供 NodePort 和其他详细信息。
kubectl describe services my-service
请查看相关kubernetes documentation
Chrome 抛出的错误是 ERR_UNSAFE_PORT
。将您的 Service
端口更改为 80
,然后在 SuperUser 上点击 http://172.42.42.101/. Alternatively you can choose any other port you like so long as Chrome doesn't consider it an unsafe port. See this answer 以获取不安全端口列表。