0

将 Istio 与 Kubernetes 一起使用,并面临一个简单的路由规则在两个部署之间拆分流量的问题。只有一个部署(你好)正确返回结果。另一个部署(你好)报告“上游没有健康”。

这是 k8s 清单:

apiVersion: v1
kind: Service
metadata:
  name: greeting
  labels:
    name: greeting
spec:
  selector:
    app: greeting
  ports:
  - name: http
    protocol: TCP
    port: 8081
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: greeting-hello
  labels:
    name: greeting-hello
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: greeting
        greeting: hello
    spec:
      containers:
      - name: greeting
        image: arungupta/greeting:hello
        imagePullPolicy: Always
        ports:
        - containerPort: 8081
        readinessProbe:
          httpGet:
            path: /resources/greeting
            port: 8081
          initialDelaySeconds: 50
          periodSeconds: 5
--- apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: greeting-howdy
  labels:
    name: greeting-howdy
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: greeting
        greeting: howdy
    spec:
      containers:
      - name: greeting
        image: arungupta/greeting:howdy
        imagePullPolicy: Always
        ports:
        - containerPort: 8081
        readinessProbe:
          httpGet:
            path: /resources/greeting
            port: 8081
          initialDelaySeconds: 50
          periodSeconds: 5

路线是:

apiVersion: config.istio.io/v1alpha2
kind: RouteRule
metadata:
  name: greeting-50-50
spec:
  destination:
    name: greeting
  route:
  - labels:
      app: greeting
      greeting: hello
    weight: 100
  - labels:
      app: greeting
      greeting: howdy
    weight: 0

任何想法?

这也在https://github.com/aws-samples/aws-microservices-deploy-options/issues/239进行了跟踪

4

1 回答 1

3

我已经重现了您的部署问题,并在此过程中发现了以下错误:

警告不健康的 48m(x7 超过 49m)kubelet,gke-cluster-1-default-pool-e44042f6-kndh 准备探测失败:获取http://10.0.2.30:8081/resources/greeting:拨打 tcp 10.0.2.30:8081: getsockopt:连接被拒绝

我建议您检查此特定配置中的 docker 容器是否在指定 (8081) 端口上公开端点。我还发现 Pod 没有在任何端点中注册:

$ kubectl describe service
[...]
IP:                10.3.247.97
Port:              http  8081/TCP
TargetPort:        8081/TCP
Endpoints:
Session Affinity:  None
Events:            <none>

问题是应用程序没有绑定到设置为容器端口的端口,并且应用程序没有接收到连接。

于 2018-04-17T16:10:31.677 回答