腾讯saas流量迁移记录
1 isito中的ingress和gateway
k8s中相关知识的回忆:
集群外部访问Service,可以将type设置为nodePort、ExternalName和externalIPs、LoadBalancer、Ingress
LoadBalancer:
该类型的Service被提交后,Kubernetes 就会调用 CloudProvider 在公有云上为你创建一个负载均衡服务,并且把被代理的 Pod 的 IP 地址配置给负载均衡服务做后端。
kuebctl get svc :可以看到external-ip。我们就可以通过该ip+port来访问了。

Ingress:
由于每个LoadBalancer类别的Service 都要有一个负载均衡服务,所以这个做法实际上浪费成本,更希望看到 Kubernetes 为我内置一个全局的负载均衡器。然后,通过我访问的 URL,把请求转发给不同的后端 Service。
对应的就是Kubernetes 里的 Ingress 服务。
ingress对象的定义如下:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: cafe-ingress
spec:
  tls:
  - hosts:
    - cafe.example.com
    secretName: cafe-secret
  rules:
  - host: cafe.example.com
    http:
      paths:
      - path: /tea
        backend:
          serviceName: tea-svc
          servicePort: 80
      - path: /coffee
        backend:
          serviceName: coffee-svc
          servicePort: 80
重点关注rules字段。
host:该Ingress对象的入口,即当用户访问 cafe.example.com 的时候,实际上访问到的是这个Ingress对象。
对应的值必须是一个标准的域名格式的字符串,而不能是 IP 地址。

引入istio之后
统一域名rest.xiaohoucode.com,对应到公网ip1
服务网格asm ingressgateway绑定了上面的ip1,所以请求会进入istio

先了解阿里云istio中的ingress
istio中kind为:IstioGateway,绑定的集群是k8s的istio-ingressgateway对应的集群
下面是k8s中istio-ingressgateway的service集群 type是LoadBalancer类型,selector是app: istio-ingressgateway
再下面是k8s中的istio-ingressgateway,实际的pod。

istio中的gateway:
说明:gateway中的selector对应的也是istio: ingressgateway,最终也会影视到上面istio-ingressgateway的pod
apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
  name: abtest-gateway
  namespace: peiyou-****
spec:
  selector:
    istio: ingressgateway
  servers:
    - hosts:
        - '*'
      port:
        name: http
        number: 80
        protocol: HTTP
    - hosts:
        - '*'
      port:
        name: https
        number: 443
        protocol: HTTPS
      tls:
        credentialName: istio-ingressgateway-certs
        mode: SIMPLE
所以:isito的ingress和gateway对应的pod是一样的,所以ingress对应的pod的功能主要就是从公网接收请求转到isito内部的gateway
然后vs再引用gateway,gateway将请求分发到不同的vs,vs层再将请求分发到k8s的service,最后到具体的pod

和gateway istio

怎么理解ingress和gateway的作用
ingress一般是对应一个公网ip,负责从外部接收流量
gateway是接收外部的请求,并根据配置规则分配给内部的service
相关pod是干活的

2 怎么通过https的方式发布无服务网格内的服务
两种方式:
1 tls相关文件上传,引用方式如下:
如下:
apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
  name: abtest-gateway-saas
  namespace: peiyou-xiaohoucode-saas
spec:
  selector:
    istio: ingressgateway
  servers:
    - hosts:
        - '*'
      port:
        name: http
        number: 80
        protocol: HTTP
    - hosts:
        - '*'
      port:
        name: https
        number: 443
        protocol: HTTPS
      tls:
        mode: SIMPLE
        privateKey: /etc/istio/ingressgateway-certs/tls.key
        serverCertificate: /etc/istio/ingressgateway-certs/tls.crt
2 获取tls相关配置后建立secrets,将相关内容存储在secrets,
secretc配置:
apiVersion: v1
data:
  tls.crt: LS0tCg==
  tls.key: LS0tg==
kind: Secret
metadata:
  creationTimestamp: "2022-10-19T03:41:01Z"
  managedFields:
  - apiVersion: v1
    fieldsType: FieldsV1
    fieldsV1:
      f:data:
        .: {}
        f:tls.crt: {}
        f:tls.key: {}
      f:type: {}
    manager: rancher
    operation: Update
    time: "2022-10-19T03:41:01Z"
  name: istio-ingressgateway-certs
  namespace: istio-system
  resourceVersion: "49154055"
  selfLink: /api/v1/namespaces/istio-system/secrets/istio-ingressgateway-certs
  uid: c172c8b5-b1c5-4edb-85b3-c7e08a34cea5
type: kubernetes.io/tls

gateway中的引用:
apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
  name: abtest-gateway
  namespace: peiyou-xiaohoucode
spec:
  selector:
    istio: ingressgateway
  servers:
    - hosts:
        - '*'
      port:
        name: http
        number: 80
        protocol: HTTP
    - hosts:
        - '*'
      port:
        name: https
        number: 443
        protocol: HTTPS
      tls:
        credentialName: istio-ingressgateway-certs #这里是secret的名称
        mode: SIMPLE

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐