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 资源组。一旦我将端口暴露给集群本身,流量 运行 通过就好了。
我的 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 资源组。一旦我将端口暴露给集群本身,流量 运行 通过就好了。