将Istio与Kubernetes一起使用,并面临两个部署之间分割流量的简单路由器的问题。只有一个部署(howdy)正确返回结果。另一个部署(你好)报告“没有健康的上游”。
这是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
进行跟踪答案 0 :(得分:1)
我已经重现了您的部署问题,并在此过程中发现了以下错误:
警告不健康的48米(x7超过49米)kubelet,gke-cluster-1-default-pool-e44042f6-kndh准备情况探测失败:获取http://10.0.2.30:8081/resources/greeting:拨打tcp 10.0.2.30:8081:getsockopt:连接被拒绝< / p>
我建议您检查此特定配置中的docker容器是否为 在指定的(8081)端口上公开端点。我还发现pods没有注册 端点:
$ kubectl describe service
[...]
IP: 10.3.247.97
Port: http 8081/TCP
TargetPort: 8081/TCP
Endpoints:
Session Affinity: None
Events: <none>
问题是应用程序没有绑定到设置为容器端口的端口, 并且应用程序没有收到连接。