istio学习笔记(1)-配置Gateway
版权声明 本站原创文章 由 萌叔 发表
转载请注明 萌叔 | https://vearne.cc
1. 前言
萌叔试图通过Gateway把服务暴露在服务网格外部,下面是笔者的一些总结。
2. 体系结构
很重要
gateway-controller <-> ingress-controller (实际的pod)
istio-ingressgateway <-> nginx-ingress-controller (一种实现)
gateway <-> ingress (配置)
gateway-controller
的一个实现是 istio-ingressgateway
ingress-controller
的一个实现是 nginx-ingress-controller
nginx-ingress-controller
相当于openresty, 配置ingress
以后会生成对应nginx的配置文件。同样配置gateway
之后, 会生成envoy对应的配置文件。
3. 配置
3.1 istio-ingressgateway
当安装了istio以后,服务中会有一个istio-ingressgateway
默认情况下, istio-ingressgateway
对应的容器并没有暴露在服务网格之外。需要修改配置。
修改istio-ingressgateway
的 Deployment
也可以直接修改helm的 deployment.yaml
"dnsPolicy": "ClusterFirstWithHostNet" # 修改(确保能够正确访问pilot)
"hostNetwork": true # 添加 (将pod以host网络模式暴露在服务网格外部)
“ClusterFirstWithHostNet“: For Pods running with hostNetwork, you should explicitly set its DNS policy “ClusterFirstWithHostNet”.
3.2 gateway
以对kiali的配置为例
1) 创建namespace
kubectl create namespace myistio
2)配置gateway
文件 kiali-gateway.yaml
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: kiali-gateway # A
spec:
selector:
istio: ingressgateway # use Istio default gateway implementation
servers:
- port:
number: 80
name: http
protocol: HTTP
hosts:
- "kiali.gateway.io" # B
执行
kubectl apply -f kiali-gateway.yaml -n myistio
3)VirtulService 也得做相应调整
文件 kiali-vs.yaml
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: kiali-vs
spec:
hosts:
- kiali
- kiali.gateway.io # B
gateways:
- kiali-gateway.myistio.svc.cluster.local # A (myistio是gateway所在的namespace)
http:
- route:
- destination:
host: kiali.istio-system.svc.cluster.local
执行
kubectl apply -f kiali-vs.yaml -n myistio
注意:在2个配置文件,A、B区域都必须一一对应
"kiali.gateway.io" 可以随便编一个
3.3 从网格外部访问
配置hosts(如果有真实的域名,可以直接使用DNS服务器来配置)
vim /etc/hosts
# 添加
192.168.100.110 kiali.gateway.io
192.168.100.110是istio-ingressgateway-65c54f84b4-6d5t
(istio-ingressgateway
的一个Pod所在的宿主机的IP)
4. 调试
如果VirtualService
和Gateway
配置成功,访问istio-ingressgateway-65c54f84b4-6d5t
所在的Pod
查看envoy的配置
root@tv-k8s-test-node-18d308a12-2:/# curl http://localhost:15000/config_dump| grep -A 10 kiali.gateway.io
"name": "kiali.gateway.io:80",
"domains": [
"kiali.gateway.io",
"kiali.gateway.io:80"
],
"routes": [
{
"match": {
"prefix": "/"
},
"route": {
"cluster": "outbound|20001||kiali.istio-system.svc.cluster.local",
"timeout": "0s",
"retry_policy": {
调整envoy的日志级别 获得更多信息
curl -XPOST http://localhost:15000/logging?level=debug