我有一个TKG 2.1.1(kubernetes版本1.24.10)集群部署在Azure的私有网络中,该集群已经配置了内部负载平衡器(由tanzu安装程序)。当尝试部署istio-ingressgateway时,服务会停留在挂起状态。
安装命令:
helm install -f values.yaml istio-ingressgateway istio/gateway -n istio-ingress --wait
values.yaml:
service:
type: LoadBalancer
ports:
- name: status-port
port: 15021
protocol: TCP
targetPort: 15021
- name: http2
port: 80
protocol: TCP
targetPort: 80
- name: https
port: 443
protocol: TCP
targetPort: 443
annotations:
service.beta.kubernetes.io/azure-load-balancer-internal: 'true'
还尝试运行对值文件进行更改的升级。修订版2:
service:
type: LoadBalancer
ports:
- name: status-port
port: 15021
protocol: TCP
targetPort: 15021
- name: http2
port: 80
protocol: TCP
targetPort: 80
- name: https
port: 443
protocol: TCP
targetPort: 443
annotations:
service.beta.kubernetes.io/azure-load-balancer-internal: 'true'
service.beta.kubernetes.io/azure-load-balancer-ipv4: <existing lb ip>
版本3:
service:
type: LoadBalancer
ports:
- name: status-port
port: 15021
protocol: TCP
targetPort: 15021
- name: http2
port: 80
protocol: TCP
targetPort: 80
- name: https
port: 443
protocol: TCP
targetPort: 443
annotations:
service.beta.kubernetes.io/azure-load-balancer-internal: 'true'
service.beta.kubernetes.io/azure-load-balancer-internal-subnet: app-pln-snet
不管使用的值是什么,状态返回:
helm status istio-ingressgateway -n istio-ingress
NAME: istio-ingressgateway
LAST DEPLOYED: Thu Jun 1 05:23:31 2023
NAMESPACE: istio-ingress
STATUS: failed
REVISION: 3
TEST SUITE: None
NOTES:
"istio-ingressgateway" successfully installed!
该服务看起来像:
kubectl describe service istio-ingressgateway -n istio-ingress
Name: istio-ingressgateway
Namespace: istio-ingress
Labels: app=istio-ingressgateway
app.kubernetes.io/managed-by=Helm
app.kubernetes.io/name=istio-ingressgateway
app.kubernetes.io/version=1.17.2
helm.sh/chart=gateway-1.17.2
istio=ingressgateway
Annotations: meta.helm.sh/release-name: istio-ingressgateway
meta.helm.sh/release-namespace: istio-ingress
service.beta.kubernetes.io/azure-load-balancer-internal: true
service.beta.kubernetes.io/azure-load-balancer-internal-subnet: app-pln-snet
Selector: app=istio-ingressgateway,istio=ingressgateway
Type: LoadBalancer
IP Family Policy: SingleStack
IP Families: IPv4
IP: 100.69.48.176
IPs: 100.69.48.176
Port: status-port 15021/TCP
TargetPort: 15021/TCP
NodePort: status-port 32090/TCP
Endpoints: 100.96.1.230:15021
Port: http2 80/TCP
TargetPort: 80/TCP
NodePort: http2 31815/TCP
Endpoints: 100.96.1.230:80
Port: https 443/TCP
TargetPort: 443/TCP
NodePort: https 30364/TCP
Endpoints: 100.96.1.230:443
Session Affinity: None
External Traffic Policy: Cluster
Events: <none>
kubectl get service istio-ingressgateway -n istio-ingress -o wide
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
istio-ingressgateway LoadBalancer 100.69.48.176 <pending> 15021:32090/TCP,80:31815/TCP,443:30364/TCP 42m app=istio-ingressgateway,istio=ingressgateway
期望的是istio-ingressgateway将连接到现有的Azure内部lb并获得IP。
1条答案
按热度按时间exdqitrt1#
因此,为了让它工作,我对TKG 2.1.1和Istio 1.17.2的初始部署进行了一些更改。为了解决我遇到的问题,我不得不销毁TKG工作负载集群并重建它。
需要更改用于部署工作负载集群的集群定义yaml。所做的更改是注解掉用于创建出站LB的值。
这些值告诉Tanzu为计算平面创建内部LB和出站LB。最后,当通过Helm安装Istio 1.17.2时,入口网关创建无法协调已经生成的控制平面的内部负载均衡器。在这种情况下,必须允许Istio在集群中为计算平面创建内部LB,因此您不能让TKG这样做。
问题的下一个方面是Azure NSG命名不匹配。因为我们部署到Azure上的私有集群配置中,所以网络、子网和nsg已经存在。当以这种方式构建它时,Tanzu期望计算平面snet的nsg名称为
cluster-name-node-nsg
,并且它必须驻留在具有vnet/snts的资源组中。然而,当Istio尝试构建内部LB时,它正在寻找一个名为cluster-name-id-node-nsg
的nsg,当它没有找到时,检查失败。要在TKG生成群集后协调此操作,您可以搜索为Azure门户中的控制平面创建的内部LB。它将被命名为
cluster-name-id-internal-lb
。然后,您可以创建一个名为cluster-name-id-node-nsg
的新nsg,其id与lb资源中的id相同。新nsg必须与vnet位于同一资源组中。并且,您必须将其分配给集群的计算平面snet。这将取代先前在专用网络中设置的nsg,以便安装TKG。您还需要确保它具有相同的规则和它要替换的nsg。一旦新的nsg到位,Istio将创建一个新的LB
cluster-name-internal
,计算平面作为后端,服务将获得私有IP。你只需要在values.yaml中传递这些值,然后从问题中安装helm,就可以工作了: