Kubernetes / AKS:将外部流量路由到服务

Kubernetes / AKS: Route external traffic to Service

我的 AKS 集群中有一项服务需要内部和外部通信来进行身份验证。

目前的流程是这样的

GUI 应用程序通过 FQDN 与入口通信,流量被传递到中间件,中间件与同一命名空间内的另一个中间件对话并进行身份验证。

第一组认证完成后,GUI应用程序需要与第二个中间件通信。

为了完成这个,我想我会在服务上设置一个外部 IP,这样我就可以在命名空间内与 pods 通信,但我无法在外部解决这个问题。在集群中,我可以远程登录并正常访问 Pod/IP,这告诉我这是一个网络问题,我只是不确定在哪里。

这些是我到目前为止执行的步骤:

# creating IP from prefix
az network public-ip create \
    --name mw-dev-ip \
    --resource-group AKS-Dev-Node \
    --allocation-method Static \
    --sku Basic \
    --version IPv4



# Get IP address
az network public-ip show \
-n mw-dev-ip \
-g AKS-Dev-Node \
--query "ipAddress" \
-o tsv

# Enter your details below.
PIP_RESOURCE_GROUP=AKS-Dev-Node
AKS_RESOURCE_GROUP=AKS-Dev
AKS_CLUSTER_NAME=AKS-Dev-Cluster
#
CLIENT_ID=$(az aks show --resource-group $AKS_RESOURCE_GROUP --name $AKS_CLUSTER_NAME --query "servicePrincipalProfile.clientId" --output tsv)
SUB_ID=$(az account show --query "id" --output tsv)
az role assignment create \
--assignee $CLIENT_ID \
--role "Network Contributor" \
--scope /subscriptions/$SUB_ID/resourceGroups/$PIP_RESOURCE_GROUP

执行上述这些步骤创建了具有 public IP 地址的负载均衡器,然后我可以将其添加到我的服务清单中

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/azure-load-balancer-resource-group: AKS-Dev-Node
  name: {{ template "mw.fullname" . }}
  labels:
    app: {{ template "mw.name" . }}
    chart: {{ template "mw.chart" . }}
    release: {{ .Release.Name }}
    heritage: {{ .Release.Service }}
spec:
  loadBalancerIP: {{ .Values.mw_host }}
  type: {{ .Values.service.type }}
  ports:
    - port: {{ .Values.service.port }}
      targetPort: {{ .Values.service.port }}
      protocol: TCP
      name: {{ .Values.service.name }}
    - port: {{ .Values.ping.port }}
      targetPort: {{ .Values.ping.port }}
      protocol: TCP
      name: {{ .Values.ping.name }}
  selector:
    app: {{ template "mw.name" . }}
    release: {{ .Release.Name }}

我不确定我错过了哪一步从外面击中它。我检查了我的 NSG,所有流量都打开了,它前面的防火墙也一样。在集群中,我可以远程登录并点击它,就像我直接端口转发 pod 端点一样。

我也可以毫无问题地针对 pod 的端点 IP 进行远程登录,它只是试图将此外部 IP 路由到端点以从外部访问服务。

如有任何有用的建议,我们将不胜感激。

没关系,问题是我只更新了 AKS 节点资源组的 NSG,我没有更新 AKS 资源组。一旦我将端口暴露给集群本身,流量 运行 通过就好了。