Istio Gateway发布服务
1. Istio Gateway发布服务
在集群中部署一个 tomcat 应用程序。然后将部署一个 Gateway 资源和一个与 Gateway 绑定的 VirtualService,以便在外部 IP 地址上公开该应用程序。
1.1 部署 Gateway 资源
vim ingressgateway.yaml
---
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: ingressgateway80
spec:
selector:
istio: ingressgateway
servers:
- port:
number: 80
name: http
protocol: HTTP
hosts:
- '*'
把 hosts 字段设置为 *,可以直接从外部 IP 地址访问入口网关。
1.2 部署Tomcat 应用
拉取所需的镜像:
docker pull tomcat:latest
docker save tomcat:latest -o tomcat-latest.img
docker load < tomcat-latest.img
部署tomcat
vim tomcat.yaml
---
apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
labels:
app: tomcat
name: tomcat
spec:
replicas: 1
selector:
matchLabels:
app: tomcat
strategy: {}
template:
metadata:
creationTimestamp: null
labels:
app: tomcat
spec:
containers:
- image: tomcat:latest
imagePullPolicy: IfNotPresent
name: tomcat
ports:
- containerPort: 8080
resources: {}
status: {}
kubectl apply -f tomcat.yaml
deployment创建成功,并且有两个容器在运行。一个是 Envoy sidecar 代理,第二个是应用程序tomcat。如下:
1.3 部署Tomcat service
vim tomcat.yaml
---
apiVersion: v1
kind: Service
metadata:
creationTimestamp: null
labels:
app: tomcat
name: tomcat
spec:
ports:
- port: 80
name: tcp
protocol: TCP
targetPort: 8080
selector:
app: tomcat
status:
loadBalancer: {}
创建service
kubectl apply -f service.yaml
1.4 部署VirtualService
为 tomcat 服务创建一个 VirtualService,并将其绑定到 Gateway 资源上
vim virtualservice.yaml
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: virtualservice
spec:
hosts:
- "*"
gateways:
- ingressgateway
http:
- route:
- destination:
host: tomcat.default.svc.cluster.local
port:
number: 80
创建virtualservice
kubectl apply -f virtualservice.yaml
在 hosts 字段中使用 *,就像我们在 Gateway 中做的那样。我们还将之前创建的 Gateway 资源(gateway)添加到 gateways 数组中。最后,我们指定了一个目的地为 Kubernetes 服务 tomcat.default.svc.cluster.local 的单一路由。
kubectl get svc -l istio=ingressgateway -n istio-system
如果 EXTERNAL-IP 有值(IP 地址或主机名),则说明环境具有可用于 Ingress 网关的外部负载均衡器。如果 EXTERNAL-IP 值是 (或一直是 ),则说明的环境并没有为 Ingress 网关提供外部负载均衡器的功能。
可以通过以下方法添加外部IP
kubectl edit service istio-ingressgateway -n istio-system
添加externalIPs,此处填在为master的IP地址
重新查看,有地址了
对 GATEWAY_URL 运行 cURL 或在浏览器中打开它,我们将得到 tomcat 的响应如下:
另外,注意到 server 头设置为 istio-envoy,告诉我们该请求通过了 Envoy 代理。
1.4 清理资源
删除 Deployment、Service、VirtualService 和 Gateway:
kubectl delete deployments tomcat
kubectl delete service tomcat
kubectl delete virtualservice virtualservice
kubectl delete gateways ingressgateway
2. 参考文献
https://www.cnblogs.com/renshengdezheli/p/16838966.html
https://blog.csdn.net/weixin_41709748/article/details/122695478
https://developer.aliyun.com/article/886726
https://www.bookstack.cn/read/istio-handbook/best-practices-how-to-implement-ingress-gateway.md
https://www.cnblogs.com/boshen-hzb/p/10679863.html
https://istio.io/latest/zh/docs/tasks/traffic-management/ingress/ingress-control/
原文地址:https://blog.csdn.net/nanhai_happy/article/details/143499900
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!