无法修改externalTrafficPolicy

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

我需要保留源 IP,直到它们到达我的目标容器(X-Forwarded-For 标头);在网络上,解决方案/建议引导我将 LB 服务定义上的 externalTrafficPolicy 更改为“本地”;然而,使用 kubectl edit 或 patch 不起作用(Azure 平台不断将我刚刚所做的更改恢复为默认值)。我使用 AKS 管理的 Istio。

apiVersion: v1
kind: Service
metadata:
  annotations:
    meta.helm.sh/release-name: asm-igx-aks-istio-ingressgateway-external
    meta.helm.sh/release-namespace: aks-istio-ingress
  creationTimestamp: "0.0.0.0"
  finalizers:
  - service.kubernetes.io/load-balancer-cleanup
  labels:
    app: aks-istio-ingressgateway-external
    app.kubernetes.io/managed-by: Helm
    app.kubernetes.io/name: aks-istio-ingressgateway-external
    app.kubernetes.io/version: 1.0.0
    helm.sh/chart: azure-service-mesh-istio-ingress-gateway-addon-1.0.0-0.0.0.0
    helm.toolkit.fluxcd.io/name: asm-ingress-aks-istio-ingressgateway-external
    helm.toolkit.fluxcd.io/namespace: 0.0.0.0
    istio: aks-istio-ingressgateway-external
  name: aks-istio-ingressgateway-external
  namespace: aks-istio-ingress
  resourceVersion: "0.0.0.0"
  uid: 0.0.0.0
spec:
  allocateLoadBalancerNodePorts: true
  clusterIP: 0.0.0.0
  clusterIPs:
  - 0.0.0.0
  externalTrafficPolicy: Cluster
  internalTrafficPolicy: Cluster
  ipFamilies:
  - IPv4
  ipFamilyPolicy: 0.0.0.0
  ports:
  - name: status-port
    nodePort: 0.0.0.0
    port: 0.0.0.0
    protocol: TCP
    targetPort: 0.0.0.0
  - name: http2
    nodePort: 0.0.0.0
    port: 0.0.0.0
    protocol: TCP
    targetPort: 0.0.0.0
  - name: https
    nodePort: 0.0.0.0
    port: 0.0.0.0
    protocol: TCP
    targetPort: 0.0.0.0
  selector:
    app: aks-istio-ingressgateway-external
    istio: aks-istio-ingressgateway-external
  sessionAffinity: None
  type: LoadBalancer
status:
  loadBalancer:
    ingress:
    - ip: 0.0.0.0

尝试使用 kubectl 命令,但没有成功 找不到自动部署和管理 aks istio ingress 以及 LB 等其他资源的对应 helm Charts

azure-aks azure-load-balancer x-forwarded-for
2个回答
1
投票

考虑到您的设置详细信息以及将 Istio Ingress Gateway 的

externalTrafficPolicy
修改为
Local
的需要,以下是如何根据 Istio 组件的 Helm 部署继续操作,特别针对
 中的 
istio-ingress
 版本istio-ingress
命名空间。

如果

istio-ingress
Helm 版本使用默认值,您需要创建一个自定义值文件来覆盖 Istio Ingress Gateway 服务的
externalTrafficPolicy

  1. 创建一个新的 YAML 文件,命名为

    custom-values.yaml

  2. 将以下内容添加到

    custom-values.yaml
    ,假设
    gateway
    Helm 图表结构允许指定服务属性:

  3. 使用 Helm 应用更改

  4. 使用自定义值升级您的 Helm 版本以修改

    externalTrafficPolicy
    。在终端中运行以下命令:

helm upgrade istio-ingress <chart-location> -n istio-ingress -f custom-values.yaml

<chart-location>
替换为初始安装期间使用的图表参考。

  1. 通过运行以下命令验证服务的
    externalTrafficPolicy
    现在设置为
    Local
 kubectl get svc istio-ingressgateway -n istio-ingress -o jsonpath="{.spec.externalTrafficPolicy}"

示例: 我的 istio 设置 enter image description here

就我而言,

istio-ingress
Helm 版本使用默认值,因此我将创建一个自定义值文件来覆盖 Istio Ingress Gateway 服务的
externalTrafficPolicy
,如下所示 -

vim custom-values.yaml
service:
  type: LoadBalancer
  externalTrafficPolicy: Local

现在,如何知道具体要修改哪里呢? 为此,请执行

helm show values istio/gateway
enter image description here

这里,根据

helm show values istio/gateway
的输出,要将 Istio Ingress Gateway 的
externalTrafficPolicy
修改为
Local
,您应该关注值的
service
部分。从值输出中可以清楚地看出,可以在
externalTrafficPolicy
部分下直接配置
service
。这就是为什么我相应地修改了我的 custom-values.yaml。

您的

custom-values.yaml
文件现在结构正确,应用更改

helm upgrade istio-ingress istio/gateway -n istio-ingress -f custom-values.yaml --wait

enter image description here

现在验证-

kubectl get svc istio-ingress -n istio-ingress -o jsonpath='{.spec.externalTrafficPolicy}'

enter image description here


0
投票

嘿,你找到了如何在不恢复掌舵的情况下改变这一点吗?这里也有类似的问题。

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