istio部署demoapp应用(一)单版本
环境说明
-
frontend(proxy):前端应用,会请求后端的demoapp
-
service: proxy
-
-
demoapp:后端应用
-
service: demoappv10
-
- 访问流程
- client pod ---> (Egress Listener proxy:80) client sidecar Envoy ---> (Ingress Listener ) proxy pod ---> (egress Listener ) proxy pod---> (Ingress Listener) demoappv10:8080 ---> (egress Listener) demoappv10:8080 ---> (Ingress Listener) demoappv10 pod
开启Istio sidecar自动注入功能
# kubectl label namespace default istio-injection=enabled
namespace/default labeled
创建demoapp应用
创建demoapp配置清单
生成depoly-demoapp-v10.yaml
# kubectl create deployment demoappv10 --image=ikubernetes/demoapp:v1.0 --replicas=3 --dry-run=client -o yaml > depoly-demoapp-v10.yaml
修改depoly-demoapp-v10.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: demoapp
version: v1.0
name: demoappv10
spec:
replicas: 3
selector:
matchLabels:
app: demoapp
strategy: {}
template:
metadata:
creationTimestamp: null
labels:
app: demoapp
version: v1.0
spec:
containers:
- image: ikubernetes/demoapp:v1.0
name: demoapp
env:
- name: PORT
value: "8080"
resources: {}
创建demoapp svc配置清单
生成service-demoapp-v10.yaml
# kubectl create service clusterip demoappv10 --tcp=8080:8080 --dry-run=client -o yaml > service-demoapp-v10.yaml
修改service-demoapp-v10.yaml
apiVersion: v1
kind: Service
metadata:
labels:
app: demoapp
name: demoappv10
spec:
ports:
- name: http-8080
port: 8080
protocol: TCP
targetPort: 8080
selector:
app: demoapp
version: v1.0
type: ClusterIP
创建demoapp资源
生成demoapp pod
# kubectl apply -f .
deployment.apps/demoappv10 created
service/demoappv10 created
查看demoapp pod
# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
demoappv10-6ffb8d999c-pzrpm 2/2 Running 0 4m22s 172.20.154.214 192.168.174.106 <none> <none>
demoappv10-6ffb8d999c-smtmt 2/2 Running 0 4m22s 172.20.44.236 192.168.174.107 <none> <none>
demoappv10-6ffb8d999c-z6jmn 2/2 Running 0 4m22s 172.20.89.160 192.168.174.108 <none> <none>
生成demoapp pod变量
# DEMOAPP_POD=$(kubectl get pods -l app=demoapp -o jsonpath={.items[0].metadata.name})
查看demoapp 网格内状态
查看listeners
~# istioctl proxy-config listeners $DEMOAPP_POD --port 8080
ADDRESS PORT MATCH DESTINATION
0.0.0.0 8080 Trans: raw_buffer; App: http/1.1,h2c Route: 8080
0.0.0.0 8080 ALL PassthroughCluster
查看routes
~# istioctl proxy-config routes $DEMOAPP_POD
NAME DOMAINS MATCH VIRTUAL SERVICE
grafana.istio-system.svc.cluster.local:3000 * /*
15010 istiod.istio-system, 10.100.149.76 /*
kube-dns.kube-system.svc.cluster.local:9153 * /*
kubernetes-dashboard.kubernetes-dashboard.svc.cluster.local:443 * /*
jaeger-collector.istio-system.svc.cluster.local:14250 * /*
9411 jaeger-collector.istio-system, 10.100.122.235 /*
9411 zipkin.istio-system, 10.100.29.132 /*
dashboard-metrics-scraper.kubernetes-dashboard.svc.cluster.local:8000 * /*
80 istio-egressgateway.istio-system, 10.100.121.95 /*
80 istio-ingressgateway.istio-system, 10.100.145.112 /*
80 tracing.istio-system, 10.100.92.199 /*
InboundPassthroughClusterIpv4 * /*
8080 demoappv10, demoappv10.default + 1 more... /*
jaeger-collector.istio-system.svc.cluster.local:14268 * /*
inbound|8080|| * /*
9090 kiali.istio-system, 10.100.48.203 /*
9090 prometheus.istio-system, 10.100.42.102 /*
inbound|8080|| * /*
istio-ingressgateway.istio-system.svc.cluster.local:15021 * /*
* /stats/prometheus*
* /healthz/ready*
InboundPassthroughClusterIpv4 * /*
15014 istiod.istio-system, 10.100.149.76 /*
16685 tracing.istio-system, 10.100.92.199 /*
20001 kiali.istio-system, 10.100.48.203 /*
查看endpoint
~# istioctl proxy-config endpoint $DEMOAPP_POD --cluster "outbound|8080||demoappv10.default.svc.cluster.local"
ENDPOINT STATUS OUTLIER CHECK CLUSTER
172.20.154.215:8080 HEALTHY OK outbound|8080||demoappv10.default.svc.cluster.local
172.20.44.237:8080 HEALTHY OK outbound|8080||demoappv10.default.svc.cluster.local
172.20.89.161:8080 HEALTHY OK outbound|8080||demoappv10.default.svc.cluster.local
在网格内访问demoapp
创建client
~# kubectl run client --image=ikubernetes/admin-box -it --rm --restart=Never --command -- /bin/sh
If you don't see a command prompt, try pressing enter.
root@client #
查看client 端口
root@client # netstat -tnlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:15006 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:15006 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:15001 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:15001 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:15021 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:15021 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.1:15000 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.1:15004 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:15090 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:15090 0.0.0.0:* LISTEN -
tcp 0 0 :::15020 :::* LISTEN -
访问demo app
root@client # curl demoappv10:8080 #不是通过demoapp svc, 通过主机名称访问,envoy代理 listener 监听8080端口
iKubernetes demoapp v1.0 !! ClientIP: 127.0.0.6, ServerName: demoappv10-78b6586d58-h7kpb, ServerIP: 172.20.89.161!
在kiali查看访问流程
创建proxy
depoly-proxy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: proxy
spec:
progressDeadlineSeconds: 600
replicas: 1
selector:
matchLabels:
app: proxy
template:
metadata:
labels:
app: proxy
spec:
containers:
- env:
- name: PROXYURL
value: http://demoappv10:8080
image: ikubernetes/proxy:v0.1.1
imagePullPolicy: IfNotPresent
name: proxy
ports:
- containerPort: 8080
name: web
protocol: TCP
resources:
limits:
cpu: 50m
---
apiVersion: v1
kind: Service
metadata:
name: proxy
spec:
ports:
- name: http-80 # 固定格式协议+端口号
port: 80
protocol: TCP
targetPort: 8080
selector:
app: proxy
---
创建proxy资源
# kubectl apply -f depoly-proxy.yaml
deployment.apps/proxy created
service/proxy created
查看 proxy pod
# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
client 2/2 Running 0 34m 172.20.89.162 192.168.174.108 <none> <none>
demoappv10-78b6586d58-bwjmh 2/2 Running 0 57m 172.20.44.237 192.168.174.107 <none> <none>
demoappv10-78b6586d58-h7kpb 2/2 Running 0 57m 172.20.89.161 192.168.174.108 <none> <none>
demoappv10-78b6586d58-z9mht 2/2 Running 0 57m 172.20.154.215 192.168.174.106 <none> <none>
proxy-7b79687bbc-bmz7x 2/2 Running 0 2m42s 172.20.154.216 192.168.174.106 <none> <none>
查看proxy svc
# kubectl get svc -o wide
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
demoappv10 ClusterIP 10.100.15.159 <none> 8080/TCP 57m app=demoapp,version=v1.0
kubernetes ClusterIP 10.100.0.1 <none> 443/TCP 8d <none>
proxy ClusterIP 10.100.39.182 <none> 80/TCP 2m53s app=proxy
访问demoapp
创建client
~# kubectl run client --image=ikubernetes/admin-box -it --rm --restart=Never --command -- /bin/sh
If you don't see a command prompt, try pressing enter.
root@client #
访问demo app
root@client # curl proxy
Proxying value: iKubernetes demoapp v1.0 !! ClientIP: 127.0.0.6, ServerName: demoappv10-78b6586d58-bwjmh, ServerIP: 172.20.44.237!
- Took 318 milliseconds.
在kiali查看访问流程
app访问流程
clinet ---> proxy 服务 ---> proxy pod ---> demoappv10 服务 ---> demoappv10 pod
service 访问流程