应用程序容器中的 Curl 使用 Istio 失败

问题描述 投票:0回答:1

将 istio 集成到 k8s 集群中。我正在尝试从同一命名空间中的 ubuntu pod(该 pod 也有 envoy)卷曲到无头服务(三个 pod 之一)后面的 etcd pod。

当我卷曲到无头服务 etcd pod 时,我看到 404 页面未找到。

我尝试创建虚拟服务和目标规则

apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: etcd-route-rule
  namespace: aks-istio-system
spec:
  hosts:
  - "*"
  http:
   - route:
      - destination:
          host: <etcd-pod>.<headless-svc-name>.ns.svc.cluster.local
          port:
            number: 2380
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
  name: etcd-mtls-dstrule
  namespace: aks-istio-system
spec:
  host: <etcd-pod>.<headless-svc-name>.ns.svc.cluster.local
  trafficPolicy:
    tls:
     mode: ISTIO_MUTUAL

我开始收到 503 错误。我在这里做错了什么?

networking azure-aks istio envoyproxy kubernetes-networking
1个回答
0
投票

要正确设置您的环境并避免 Istio 和 etcd 服务遇到的错误,请按照以下步骤操作:

使用无头服务部署 etcd 集群

  1. 部署 etcd Pod:确保您的 etcd Pod 部署在 Kubernetes 中。您可能为此使用 StatefulSet,这对于 etcd 集群来说是典型的。

  2. 创建无头服务:在 Kubernetes 中为您的 etcd 集群定义无头服务。这是一个服务定义示例:

apiVersion: v1
kind: Service
metadata:
  name: etcd-headless
  namespace: aks-istio-system
spec:
  ports:
  - port: 2380
    name: peer
  - port: 2379
    name: client
  clusterIP: None  # This makes the service headless
  selector:
    app: etcd  # Adjust this selector to match your etcd pods

enter image description here enter image description here enter image description here

安装并配置 Istio 以启用自动 sidecar 注入 enter image description here

kubectl label namespace aks-istio-system istio-injection=enabled

enter image description here

确保您的 etcd pod 已注入 Istio sidecar。如果它们在启用 Istio 之前运行,您可能需要重新创建 Pod。 enter image description here

接下来,通过创建 VirtualService 来管理 etcd 无头服务的流量和 DestinationRule 来指定流量策略(例如 TLS 设置)来配置 Istio Networking。

virtualService.yaml

apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: etcd-route-rule
  namespace: aks-istio-system
spec:
  hosts:
  - "etcd-headless.aks-istio-system.svc.cluster.local"
  http:
  - route:
    - destination:
        host: "etcd-headless.aks-istio-system.svc.cluster.local"
        port:
          number: 2379  # or 2380 depending on the port you want to access

DestinationRule.yaml

apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
  name: etcd-destination-rule
  namespace: aks-istio-system
spec:
  host: "etcd-headless.aks-istio-system.svc.cluster.local"
  trafficPolicy:
    tls:
      mode: DISABLE  # Use ISTIO_MUTUAL if you want mTLS

enter image description here

现在 Istio 网络对象已就位,您可以测试连接性。由于

etcd
pod 可能是 etcd 集群本身的一部分,并且可能没有安装
curl
,因此您需要在
aks-istio-system
命名空间内有一个可用
curl
的单独 pod。如果您还没有合适的 pod,您可以创建一个临时 pod 来进行测试。以下是如何部署一个简单的 Ubuntu pod,然后使用它来测试连接。创建一个名为
ubuntu-pod.yaml
的文件,其中包含以下内容:

apiVersion: v1
kind: Pod
metadata:
  name: ubuntu-test
  namespace: aks-istio-system
spec:
  containers:
  - name: ubuntu
    image: ubuntu
    command: ["/bin/sleep", "infinity"]

部署 Pod

kubectl apply -f ubuntu-pod.yaml

pod 启动后,执行它。

kubectl exec -it ubuntu-test -n aks-istio-system -- bash

enter image description here 并安装curl

apt-get update && apt-get install curl -y

最后

curl http://etcd-headless.aks-istio-system.svc.cluster.local:2379/health

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.