如何在 istio 中配置入口网关?
How to configure ingress gateway in istio?
我是istio新手,我想通过istio ingress gateway访问我的应用程序,但我不知道为什么它不起作用。
这是我的 kubenetes_deploy.yaml
文件内容:
apiVersion: v1
kind: Service
metadata:
name: batman
labels:
run: batman
spec:
#type: NodePort
ports:
- port: 8000
#nodePort: 32000
targetPort: 7000
#protocol: TCP
name: batman
selector:
run: batman
#version: v1
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: batman-v1
spec:
replicas: 1
selector:
matchLabels:
run: batman
template:
metadata:
labels:
run: batman
version: v1
spec:
containers:
- name: batman
image: leowu/batman:v1
ports:
- containerPort: 7000
env:
- name: MONGODB_URL
value: mongodb://localhost:27017/articles_demo_dev
- name: mongo
image: mongo
这是我的 istio ingress_gateway.yaml
配置文件:
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: batman-gateway
spec:
selector:
istio: ingressgateway
servers:
- port:
number: 15000
name: http
protocol: HTTP
hosts:
- "*"
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: batman
spec:
hosts:
- "*"
gateways:
- batman-gateway
http:
- match:
route:
- destination:
host: batman
port:
number: 7000
我从示例中创建了入口网关,它看起来不错但是当我 运行 kubectl get svc istio-ingressgateway -n istio-system
我在输出中看不到监听端口 15000
。我不知道方式。
有没有人可以帮助我?谢谢。
你的 batman 服务监听 8000 端口并将流量转发到容器的 7000 端口。
istio 流量是这样的:
ingress-gateway -> virtual-service -> destination-rule [optional] -> service
所以你的虚拟服务应该是这样的:
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: batman
spec:
hosts:
- "*"
gateways:
- batman-gateway
http:
- match:
route:
- destination:
host: batman
port:
number: 8000 <--- change
首先,正如@Abhyudit Jain 提到的,您需要将 VirtualService 中的端口更正为 8000
然后您只需将另一个端口添加到您的 istio-ingressgateway 服务
kubectl edit svc istio-ingressgateway -n istio-system
添加部分:
ports:
- name: http
nodePort: 30001
port: 15000
protocol: TCP
targetPort: 80
这将在端口 15000 上接受 HTTP 流量并将其路由到端口 8000
上的目标服务
简单架构如下:
incoming traffic --> istio-gateway service --> istio-gateway --> virtual service --> service --> pod
我是istio新手,我想通过istio ingress gateway访问我的应用程序,但我不知道为什么它不起作用。
这是我的 kubenetes_deploy.yaml
文件内容:
apiVersion: v1
kind: Service
metadata:
name: batman
labels:
run: batman
spec:
#type: NodePort
ports:
- port: 8000
#nodePort: 32000
targetPort: 7000
#protocol: TCP
name: batman
selector:
run: batman
#version: v1
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: batman-v1
spec:
replicas: 1
selector:
matchLabels:
run: batman
template:
metadata:
labels:
run: batman
version: v1
spec:
containers:
- name: batman
image: leowu/batman:v1
ports:
- containerPort: 7000
env:
- name: MONGODB_URL
value: mongodb://localhost:27017/articles_demo_dev
- name: mongo
image: mongo
这是我的 istio ingress_gateway.yaml
配置文件:
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: batman-gateway
spec:
selector:
istio: ingressgateway
servers:
- port:
number: 15000
name: http
protocol: HTTP
hosts:
- "*"
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: batman
spec:
hosts:
- "*"
gateways:
- batman-gateway
http:
- match:
route:
- destination:
host: batman
port:
number: 7000
我从示例中创建了入口网关,它看起来不错但是当我 运行 kubectl get svc istio-ingressgateway -n istio-system
我在输出中看不到监听端口 15000
。我不知道方式。
有没有人可以帮助我?谢谢。
你的 batman 服务监听 8000 端口并将流量转发到容器的 7000 端口。
istio 流量是这样的:
ingress-gateway -> virtual-service -> destination-rule [optional] -> service
所以你的虚拟服务应该是这样的:
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: batman
spec:
hosts:
- "*"
gateways:
- batman-gateway
http:
- match:
route:
- destination:
host: batman
port:
number: 8000 <--- change
首先,正如@Abhyudit Jain 提到的,您需要将 VirtualService 中的端口更正为 8000
然后您只需将另一个端口添加到您的 istio-ingressgateway 服务
kubectl edit svc istio-ingressgateway -n istio-system
添加部分:
ports:
- name: http
nodePort: 30001
port: 15000
protocol: TCP
targetPort: 80
这将在端口 15000 上接受 HTTP 流量并将其路由到端口 8000
上的目标服务简单架构如下:
incoming traffic --> istio-gateway service --> istio-gateway --> virtual service --> service --> pod