如何在AKS NginX Ingress中公开服务

问题描述

我有一项服务,可在“开发”名称空间中公开“世界您好” Web部署。

YAML服务

kind: Service
apiVersion: v1
metadata:
  name: hello-v1-svc
spec:
  selector:
    app: hello-v1
  ports:
  - protocol: TCP
    port: 80
    targetPort: 8080

要测试页面是否正常运行,我运行“ kubectl port-forward”,并使用公共IP成功显示了页面。

编辑: 然后部署了Ingress,但页面仅显示在vnet地址空间内

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  labels:
    app: app
    version:  1.0.0
  name: dev-ingress
  namespace:  develop
spec:
  rules:
    - http:
        paths:
          - backend:
              serviceName: hello-v1-svc
              servicePort: 80
            path: /

进入规则

Rules:
  Host        Path  Backends
  ----        ----  --------
  *
              /   hello-v1-svc:80 (10.1.1.13:8080,10.1.1.21:8080,10.1.1.49:8080)

我要跳过什么步骤才能显示页面?

解决方法

首先回答您的评论:

也许与此注释有关: “ service.beta.kubernetes.io/azure-load-balancer-internal”。控制者 设置为“真”

当创建内部虚拟网络的入口控制器时,通常使用

service.beta.kubernetes.io/azure-load-balancer-internal: "true"批注。如果使用此注释,则将入口控制器配置在内部专用虚拟网络和IP地址上。不允许外部访问。 您可以在Create an ingress controller to an internal virtual network in Azure Kubernetes Service (AKS)文章中找到更多信息。

复制您的案例,创建AKS集群并在yamls下应用。它可以正常工作,请使用

apiVersion: v1
kind: Namespace
metadata:
  name: develop
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: hello-world-deployment
  namespace: develop
  labels:
    app: hello-v1
spec:
  selector:
    matchLabels:
      app: hello-v1
  replicas: 2
  template:
    metadata:
      labels:
        app: hello-v1
    spec:
      containers:
      - name: hello-v1
        image: paulbouwer/hello-kubernetes:1.8
        ports:
        - containerPort: 8080
---
kind: Service
apiVersion: v1
metadata:
  name: hello-v1-svc
spec:
  type: ClusterIP
  selector:
    app: hello-v1
  ports:
  - protocol: TCP
    port: 80
    targetPort: 8080
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: dev-ingress
  namespace: develop
  annotations:
    kubernetes.io/ingress.class: nginx
spec:
  rules:
    - http:
        paths:
          - backend:
              serviceName: hello-v1-svc
              servicePort: 80
            path: /

我的服务列表

vitalii@Azure:~$ kubectl get svc -A
NAMESPACE       NAME                             TYPE           CLUSTER-IP     EXTERNAL-IP    PORT(S)                      AGE
default         hello-v1-svc                     ClusterIP      10.0.20.206    <none>         80/TCP                       19m
default         kubernetes                       ClusterIP      10.0.0.1       <none>         443/TCP                      83m
ingress-basic   nginx-ingress-controller         LoadBalancer   10.0.222.156   *.*.*.*   80:32068/TCP,443:30907/TCP   53m
ingress-basic   nginx-ingress-default-backend    ClusterIP      10.0.193.198   <none>         80/TCP                       53m
kube-system     dashboard-metrics-scraper        ClusterIP      10.0.178.224   <none>         8000/TCP                     83m
kube-system     healthmodel-replicaset-service   ClusterIP      10.0.199.235   <none>         25227/TCP                    83m
kube-system     kube-dns                         ClusterIP      10.0.0.10      <none>         53/UDP,53/TCP                83m
kube-system     kubernetes-dashboard             ClusterIP      10.0.115.184   <none>         443/TCP                      83m
kube-system     metrics-server                   ClusterIP      10.0.199.200   <none>         443/TCP                      83m

为了安全起见,我当然隐藏了nginx-ingress-controller的EXTERNAL-IP。那就是您用于访问页面的IP。

您可以在Create an ingress controller in Azure Kubernetes Service (AKS)文章中找到有关轮胎的信息和建议

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...