vel*_*vel 6 nginx kubernetes kubernetes-helm azure-aks
我有 Azure Kubernetes 服务集群,并且在集群外部有来自不同虚拟网络的虚拟机,我尝试从该虚拟机连接到在 TCP 端口 9000 上运行的容器 Pod 应用程序。我不能使用公共 IP,这不是 HTTP连接,但我需要使用 TCP 连接进行连接。为此,我按照此链接中的说明进行操作: https: //learn.microsoft.com/en-us/azure/aks/ingress-internal-ip 我为 helm 安装定义了 YAML 文件
controller:
service:
annotations:
service.beta.kubernetes.io/azure-load-balancer-internal: "true"
Run Code Online (Sandbox Code Playgroud)
我配置了nginx:
helm install nginx-ingress ingress-nginx/ingress-nginx \
-f internal-ingress.yaml \
--set controller.nodeSelector."beta\.kubernetes\.io/os"=linux \
--set defaultBackend.nodeSelector."beta\.kubernetes\.io/os"=linux \
--set controller.admissionWebhooks.patch.nodeSelector."beta\.kubernetes\.io/os"=linux
Run Code Online (Sandbox Code Playgroud)
之后的 NGINX 配置是它有端口 80 和 443:
kubectl get services -o wide
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S)
nginx-ingress-ingress-ngingx controller LoadBalancer 10.0.36.81 10.33.27.35 80:31312/TCP,443:30653/TCP
Run Code Online (Sandbox Code Playgroud)
之后我运行以helm upgrade
确保我的 tcp 端口 9000 已配置
helm upgrade nginx-ingress ingress-nginx/ingress-nginx -f internal-ingress.yaml --set tcp.9000="default/frontarena-ads-aks-test:9000"
Run Code Online (Sandbox Code Playgroud)
当我检查“kubectl get configmaps”时,这会自动为我提供 ConfigMap 设置:
apiVersion: v1
data:
"9000": default/frontarena-ads-aks-test:9000
kind: ConfigMap
Run Code Online (Sandbox Code Playgroud)
我还编辑了我的 nginx 服务:
spec:
clusterIP: 10.0.36.81
externalTrafficPolicy: Cluster
ports:
- name: http
nodePort: 31312
port: 80
protocol: TCP
targetPort: http
- name: https
nodePort: 30653
port: 443
protocol: TCP
targetPort: https
- name: 9000-tcp
nodePort: 30758
port: 9000
protocol: TCP
targetPort: 9000
Run Code Online (Sandbox Code Playgroud)
我已经部署了 App Pod:
apiVersion: apps/v1
kind: Deployment
metadata:
name: frontarena-ads-deployment
labels:
app: frontarena-ads-deployment
spec:
replicas: 1
template:
metadata:
name: frontarena-ads-aks-test
labels:
app: frontarena-ads-aks-test
spec:
nodeSelector:
"beta.kubernetes.io/os": linux
restartPolicy: Always
containers:
- name: frontarena-ads-aks-test
image: fa.dev/:test1
ports:
- containerPort: 9000
selector:
matchLabels:
app: frontarena-ads-aks-test
---
apiVersion: v1
kind: Service
metadata:
name: frontarena-ads-aks-test
spec:
type: ClusterIP
ports:
- protocol: TCP
port: 9000
selector:
app: frontarena-ads-aks-test
Run Code Online (Sandbox Code Playgroud)
我也在相同的默认命名空间中配置和部署了 Ingress Controller YAML,以将我的 Ingress 与上述服务连接(我想它可以基于 ClusterIP 通过它进行连接):
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: ads-ingress
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/ssl-redirect: "false"
spec:
rules:
- http:
paths:
- path: /
backend:
serviceName: frontarena-ads-aks-test
servicePort: 9000
Run Code Online (Sandbox Code Playgroud)
现在这个问题如下:
如果我尝试从部署在 AKS 群集外部的不同虚拟网络中的 VM 应用程序(使用 Azure 管理员配置的 Ingress Controller IP 或其 DNS 名称和端口 9000)进行定位 - 我没有收到任何响应,因此可以得出 Ingress Controller 不是的结论将网络连接传播到我的服务,该服务的目标是在我的 Pod 上的端口 9000 上运行的应用程序。
我找不到 Ingress Controller 不将流量转发到我的服务的原因,该服务的目标端口 9000 是运行 My App Pod 的端口。
谢谢你!!!
小智 1
您只有一个 pod,请更改部署的 matadata 以匹配 pod 的元数据:
....
kind: Deployment
metadata:
name: frontarena-ads-aks-test
labels:
app: frontarena-ads-aks-test
spec:
replicas: 1
template:
metadata:
name: frontarena-ads-aks-test
labels:
app: frontarena-ads-aks-test
....
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2764 次 |
| 最近记录: |