istio 服务网格 服务发布
文章目录
前言
Bookinfo 是 Istio 社区官方推荐的示例应用之一。它可以用来演示多种 Istio 的特性,并且它是一个异构的微服务应用。该应用由四个单独的微服务构成。
一、istio 环境
1.容器
2.服务
其中istio-ingressgateway需要修改svc:
在spec下面添加外部负载均衡,IP地址是k8s的master节点,node节点无效。
externalIPs:
- 192.168.3.94
apiVersion: v1
kind: Service
metadata:
annotations:
kubectl.kubernetes.io/last-applied-configuration: |
{"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"labels":{"app":"istio-ingressgateway","install.operator.istio.io/owning-resource":"installed-state","install.operator.istio.io/owning-resource-namespace":"istio-system","istio":"ingressgateway","istio.io/rev":"default","operator.istio.io/component":"IngressGateways","operator.istio.io/managed":"Reconcile","operator.istio.io/version":"1.7.3","release":"istio"},"name":"istio-ingressgateway","namespace":"istio-system"},"spec":{"ports":[{"name":"status-port","port":15021,"targetPort":15021},{"name":"http2","port":80,"targetPort":8080},{"name":"https","port":443,"targetPort":8443},{"name":"tcp","port":31400,"targetPort":31400},{"name":"tls","port":15443,"targetPort":15443}],"selector":{"app":"istio-ingressgateway","istio":"ingressgateway"},"type":"LoadBalancer"}}
creationTimestamp: "2020-10-23T08:31:29Z"
labels:
app: istio-ingressgateway
install.operator.istio.io/owning-resource: installed-state
install.operator.istio.io/owning-resource-namespace: istio-system
istio: ingressgateway
istio.io/rev: default
operator.istio.io/component: IngressGateways
operator.istio.io/managed: Reconcile
operator.istio.io/version: 1.7.3
release: istio
name: istio-ingressgateway
namespace: istio-system
resourceVersion: "36077645"
selfLink: /api/v1/namespaces/istio-system/services/istio-ingressgateway
uid: 3043b502-2e20-463d-a5ce-beb0f0012db9
spec:
clusterIP: 10.96.138.129
externalIPs:
- 192.168.3.94
externalTrafficPolicy: Cluster
ports:
- name: status-port
nodePort: 28430
port: 15021
protocol: TCP
targetPort: 15021
- name: http2
nodePort: 28613
port: 80
protocol: TCP
targetPort: 8080
- name: https
nodePort: 30761
port: 443
protocol: TCP
targetPort: 8443
- name: tcp
nodePort: 13768
port: 31400
protocol: TCP
targetPort: 31400
- name: tls
nodePort: 8870
port: 15443
protocol: TCP
targetPort: 15443
selector:
app: istio-ingressgateway
istio: ingressgateway
sessionAffinity: None
type: LoadBalancer
status:
loadBalancer: {}
3.bookinfo部署
3.1 bookinfo部署
github上下载istio,并到istio-1.7.3目录,执行下面到命令:
kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
3.2 gateway部署
kind: Gateway
metadata:
annotations:
kubectl.kubernetes.io/last-applied-configuration: |
{"apiVersion":"networking.istio.io/v1alpha3","kind":"Gateway","metadata":{"annotations":{},"name":"bookinfo-gateway","namespace":"cok"},"spec":{"selector":{"istio":"ingressgateway"},"servers":[{"hosts":["*"],"port":{"name":"http","number":80,"protocol":"HTTP"}}]}}
creationTimestamp: "2020-10-26T03:27:20Z"
generation: 4
name: bookinfo-gateway
namespace: cok
resourceVersion: "36103178"
selfLink: /apis/networking.istio.io/v1beta1/namespaces/cok/gateways/bookinfo-gateway
uid: 927bcb8e-e191-4718-8209-d9d81c1750bb
spec:
selector:
istio: ingressgateway
servers:
- hosts:
- productpage-demo.io #这里指定我们外部需要访问的域名
port:
name: http
number: 80
protocol: HTTP
3.3 vs部署
3.3.1 bookinfo-vs部署
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
creationTimestamp: "2020-10-27T06:47:58Z"
generation: 5
name: bookinfo
namespace: cok
resourceVersion: "36101859"
selfLink: /apis/networking.istio.io/v1beta1/namespaces/cok/virtualservices/bookinfo
uid: d2c86f6f-5384-4c0a-b1e4-eada4c55173e
spec:
gateways:
- bookinfo-gateway
hosts:
- productpage-demo.io
http:
- match:
- uri:
exact: /productpage
- uri:
prefix: /static
- uri:
exact: /login
- uri:
exact: /logout
- uri:
prefix: /api/v1/products
route:
- destination:
host: productpage
port:
number: 9080
3.3.2 productpage-vs部署
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
creationTimestamp: "2020-10-27T06:36:54Z"
generation: 1
name: productpage
namespace: cok
resourceVersion: "35718078"
selfLink: /apis/networking.istio.io/v1beta1/namespaces/cok/virtualservices/productpage
uid: 7353841f-46c3-4a68-94c6-eb1e161cddee
spec:
hosts:
- productpage
http:
- route:
- destination:
host: productpage
subset: v1
3.4 dr部署
3.4.1 productpage-dr部署
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
creationTimestamp: "2020-10-27T06:35:34Z"
generation: 1
name: productpage
namespace: cok
resourceVersion: "35717914"
selfLink: /apis/networking.istio.io/v1beta1/namespaces/cok/destinationrules/productpage
uid: 82bba7d9-f52c-488a-9e54-b83598e3b0c6
spec:
host: productpage
subsets:
- labels:
version: v1
name: v1
3.5 修改主机hosts文件。
192.168.3.94 productpage-demo.io
3.6 浏览器通过域名访问。
总结
到这里,我们就通过创建depoy,svc,vs,gw,dr组件完成了服务网格的部署并可以通过域名进行访问。