- 命名服务端口:服务端口必须命名。端口名称键/值对必须具有以下语法
name: <protocol>[-<suffix>]
- service association:一个Pod必须至少属于一个Kubernetes服务,即使Pod不暴露任何端口也是如此。如果Pod属于多个Kubernetes服务,则这些服务不能将相同的端口号用于不同的协议,例如HTTP和TCP。
- 带有应用和版本标签的部署:我们建议为部署添加一个明确的app标签和version标签。将标签添加到使用Kubernetes Deployment部署的Pod的部署规范中。app和version标签将上下文信息添加到Istio收集的指标和遥测中。
- 应用程序UID:确保您的Pod不以用户ID(UID)值为1337的用户身份运行应用程序。
- 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自动生成)
服务需要改动的部分
- 接入网格的服务,互相调用使用内部svc地址
- envoy劫持请求会将HTTP 头部全部改成小写。(实践过程发现),应用在针对HTTP头做判断时候,要忽略大小写