我已经为我的k8s集群设置了istio,它似乎工作得很成功。istioctl也可以工作,返回版本1.17.2,与我的k8s集群兼容。部署输出如下。
k8s@k8master-virtual-machine:~$ kubectl get pods -n istio-system
NAME READY STATUS RESTARTS AGE
istio-egressgateway-85649899f8-ccgs4 1/1 Running 0 2m58s
istio-ingressgateway-f56888458-bzkfk 1/1 Running 0 2m58s
istiod-64848b6c78-74s48 1/1 Running 0 3m2s
k8s@k8master-virtual-machine:~/istio-yamls$ kubectl get rolebindings -n istio-system
NAME ROLE AGE
istio-egressgateway-sds Role/istio-egressgateway-sds 27m
istio-ingressgateway-sds Role/istio-ingressgateway-sds 27m
istiod Role/istiod 27m
istiod-istio-system Role/istiod-istio-system 27m
k8s@k8master-virtual-machine:~/istio-yamls$ kubectl get roles -n istio-system
NAME CREATED AT
istio-egressgateway-sds 2023-05-25T06:48:22Z
istio-ingressgateway-sds 2023-05-25T06:48:22Z
istiod 2023-05-25T06:48:18Z
istiod-istio-system 2023-05-25T06:48:16Z
**问题:**我遇到的非常奇怪的问题如下。当我使用kubectl apply -f gateway.yaml
应用我的网关文件时,它显示已创建。
k8s@k8master-virtual-machine:~/istio-yamls$ kubectl apply -f gateway.yaml
gateway.networking.istio.io/testmy-gateway created
但是当我使用get命令查看状态时,我发现没有找到资源。
k8s@k8master-virtual-machine:~/istio-yamls$ kubectl get gateway -n istio-system
No resources found in istio-system namespace.
在我的YAML文件中,我使用了命名空间istio-system,因为这是我的yaml文件。
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: testmy-gateway
namespace: istio-system
spec:
selector:
istio: ingressgateway
servers:
- port:
number: 80
name: gw-http
protocol: HTTP
hosts:
- '*'
”””我做了什么来修复它吗?我查看了所有命名空间**中的网关,没有任何发现。我卸载了istio并删除了它的命名空间CRD和所有数据,以清理启动,但仍然面临同样的问题。我用相同的资源创建了一个新的k8s集群,并部署了这个Istio设置,它运行得很好。
我发现一个StackOverflow question像我的问题,但答案只是一个评论。我很难理解它背后的逻辑。
**我想要什么?**由于相同的Istio设置和yaml文件在另一个集群上完美工作,这意味着这个集群有问题。我已经尝试了所有的方法来解决这个问题,但没有运气。我需要找出为什么我的网关文件部署在这里但没有显示。**请解释另一个问题,该信息如何重要?**我甚至检查网关名称并深入它,发现了同样的问题。任何帮助建议和支持将不胜感激。先谢了。
2条答案
按热度按时间58wvjzkj1#
有两种可能的解释可以解释为什么您看不到网关,即使它已成功应用。
1.您之前安装了旧版本的istio(您在评论中确认了这一点),此后网关CRD的组发生了变化,但旧版本尚未清理/仍受支持,因此它仍然存在。
1.集群中有一个不同的CRD,其名称相同(复数)
gateways
,但组不同(与istio无关)。您可以通过
kubectl get crd | grep gateways
验证哪个是真的,它将显示所有具有该复数的CRD。检查那些名称为gateways.<some-api-group>
的。如果它是一个旧的,未使用的CRD,您可以删除它。否则,您需要指定kubectl命令,如
kubectl get gateways.networking.istio.io
,因为kubectl不知道您指的是哪个组,并显示您没有任何资源的另一个组。这可能是因为Kubernetes Gateway API
gateways.gateway.networking.k8s.io
CRD。如果您的集群已经提供了CRD,您可以考虑使用它来配置网关,请参阅docs。否则,每次都需要指定完整的名称,包括istio组。你可以创建一个别名,如果这是太烦人了。
xzlaal3s2#
当我运行
kubectl get crd | grep gateways
时,我看到了四个网关我删除了所有这些与此命令
kubectl delete crd gateways.........
后,我运行istioctl install --set profile=demo -y
它安装imp CRD再次.当我再次部署gateway.yaml文件时,它显示一个错误
最后,我从istio-system命名空间重新启动所有3个部署
现在,当我部署gateway.yaml文件时,它可以正常工作。
然而,我仍然在寻找一些解释,为什么这些crd和网关的重要性,他们的角色是什么?为什么当我清理所有东西的时候它们没有被删除?
我希望这对某人有帮助。