问题描述: 当使用ArgoCD和Istio时,可能会遇到404错误。在这种情况下,应用程序无法通过Istio网关路由,并返回404错误。
解决方法:
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: my-gateway
spec:
selector:
istio: ingressgateway
servers:
- port:
number: 80
name: http
protocol: HTTP
hosts:
- "*"
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: my-app
spec:
hosts:
- my-app.example.com
gateways:
- my-gateway
http:
- route:
- destination:
host: my-app-service
port:
number: 80
请根据您的应用程序配置进行相应修改。
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: my-app
spec:
destination:
namespace: my-app-namespace
server: https://kubernetes.default.svc
source:
repoURL: https://github.com/my-org/my-app.git
targetRevision: HEAD
path: istio
project: default
syncPolicy:
automated:
prune: true
selfHeal: true
请根据您的应用程序配置进行相应修改。
kubectl get pods -n my-app-namespace -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.metadata.labels.istio\.io/injected}{"\n"}{end}'
确保所有的Pod都有"istio.io/injected=true"标签。
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: my-app
spec:
host: my-app-service
subsets:
- name: v1
labels:
version: v1
- name: v2
labels:
version: v2
请根据您的应用程序配置进行相应修改。
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
name: my-app
spec:
selector:
matchLabels:
app: my-app
action: ALLOW
rules:
- from:
- source:
principals: ["cluster.local/ns/my-namespace/sa/my-service-account"]
请根据您的应用程序配置进行相应修改。
apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
name: external-service
spec:
hosts:
- external-service