我需要保留源 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
考虑到您的设置详细信息以及将 Istio Ingress Gateway 的
externalTrafficPolicy
修改为 Local
的需要,以下是如何根据 Istio 组件的 Helm 部署继续操作,特别针对 中的
istio-ingress
版本istio-ingress
命名空间。
如果
istio-ingress
Helm 版本使用默认值,您需要创建一个自定义值文件来覆盖 Istio Ingress Gateway 服务的 externalTrafficPolicy
。
创建一个新的 YAML 文件,命名为
custom-values.yaml
。
将以下内容添加到
custom-values.yaml
,假设 gateway
Helm 图表结构允许指定服务属性:
使用 Helm 应用更改
使用自定义值升级您的 Helm 版本以修改
externalTrafficPolicy
。在终端中运行以下命令:
helm upgrade istio-ingress <chart-location> -n istio-ingress -f custom-values.yaml
将
<chart-location>
替换为初始安装期间使用的图表参考。
externalTrafficPolicy
现在设置为 Local
: kubectl get svc istio-ingressgateway -n istio-ingress -o jsonpath="{.spec.externalTrafficPolicy}"
示例: 我的 istio 设置
就我而言,
istio-ingress
Helm 版本使用默认值,因此我将创建一个自定义值文件来覆盖 Istio Ingress Gateway 服务的 externalTrafficPolicy
,如下所示 -
vim custom-values.yaml
service:
type: LoadBalancer
externalTrafficPolicy: Local
现在,如何知道具体要修改哪里呢? 为此,请执行
helm show values istio/gateway
这里,根据
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
现在验证-
kubectl get svc istio-ingress -n istio-ingress -o jsonpath='{.spec.externalTrafficPolicy}'
嘿,你找到了如何在不恢复掌舵的情况下改变这一点吗?这里也有类似的问题。