istio 对pod的要求

  1. 命名服务端口:服务端口必须命名。端口名称键/值对必须具有以下语法
    name: <protocol>[-<suffix>]
  1. service association:一个Pod必须至少属于一个Kubernetes服务,即使Pod不暴露任何端口也是如此。如果Pod属于多个Kubernetes服务,则这些服务不能将相同的端口号用于不同的协议,例如HTTP和TCP。
  2. 带有应用和版本标签的部署:我们建议为部署添加一个明确的app标签和version标签。将标签添加到使用Kubernetes Deployment部署的Pod的部署规范中。app和version标签将上下文信息添加到Istio收集的指标和遥测中。
  3. 应用程序UID:确保您的Pod不以用户ID(UID)值为1337的用户身份运行应用程序。
  4. NET_ADMIN 功能:如果您的群集强制执行Pod安全策略,则Pod必须允许NET_ADMIN功能。如果使用Istio CNI插件,则此要求不再适用。要了解有关NET_ADMIN功能的更多信息,请参见下面的必需的pod功能。

基于以上要求。 垫付宝的服务在接入网格前需要对deployment进行相应修改,一个已经修改好的deployment 如下所示

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  generation: 1
  labels:
    app: dfb-login
  name: dfb-login
  namespace: dfb-istio
spec:
  replicas: 1
  selector:
    matchLabels:
      app: dfb-login
  strategy:
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 1
    type: RollingUpdate
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: dfb-login
        version: v196
    spec:
      containers:
      - image: ult.harbor.com/dfb-azure/dfb-login:v196
        imagePullPolicy: Always
        name: dfb-login
        ports:
        - containerPort: 80
          name: http-dfblogin
          protocol: TCP
        resources:
          limits:
            cpu: 500m
            memory: 1000Mi
          requests:
            cpu: 300m
            memory: 500Mi
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
        volumeMounts:
        - mountPath: /opt/app/logs/
          name: log-path-app
        - mountPath: /usr/local/php/logs/
          name: log-path-php
        - mountPath: /opt/app/.env
          name: dfb-login-configmap
          subPath: .env
      dnsConfig:
        nameservers:
        - 172.21.0.2
        options:
        - name: ndots
          value: "5"
        - name: timeout
          value: "1"
        - name: eth0
        searches:
        - dfb-istio.svc.cluster.local
        - svc.cluster.local
        - cluster.local
      dnsPolicy: None
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      terminationGracePeriodSeconds: 60
      volumes:
      - hostPath:
          path: /data/logs/dfb-istio/dfb-login/app
          type: ""
        name: log-path-app
      - hostPath:
          path: /data/logs/dfb-istio/dfb-login/php
          type: ""
        name: log-path-php
      - configMap:
          defaultMode: 420
          name: dfb-login-configmap
        name: dfb-login-configmap

垫付宝相关服务说明

初期选择加入网格的服务有dfb-login,dfb-api,dfb-bestsign,dfb-consumer。但因为这几个服务的调用关系比较简单,后续又加入了两个外部服务,dfb-account,dfb-billing

最终的调用链图(通过jagger自动生成)

istio 对pod的要求
服务需要改动的部分

  • 接入网格的服务,互相调用使用内部svc地址
  • envoy劫持请求会将HTTP 头部全部改成小写。(实践过程发现),应用在针对HTTP头做判断时候,要忽略大小写
上一篇:Istio Helm Chart 详解 - Gateways


下一篇:kubernetes 中服务接入istio