【问题标题】:externally access the application using hostname/subdomain in ingress resource使用入口资源中的主机名/子域从外部访问应用程序
【发布时间】:2019-11-18 21:01:21
【问题描述】:

需要使用 Ingress hostname/sub-domain 从外部访问应用程序,用于以下代码中指定的应用程序。 例如 test-app.dev-cluster-poc.company.domain。

cat app-ingress.yaml

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  namespace: ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
  name: app-ingress
spec:
  rules:
  - host: test-app.dev-cluster-poc.company.domain
    http:
      paths:
      - backend:
          serviceName: appsvc1
          servicePort: 80
        path: /app1
      - backend:
          serviceName: appsvc2
          servicePort: 80
        path: /app2

在使用url 中的步骤进行故障排除时,我发现“kubectl get ingress”输出中没有 ADDRESS。期待一个像下面这样的 IP 地址。

但是,我看到如下所示,第 3 列是空的。

外部访问应用程序需要哪些必要的配置,例如注册主机名(test-app.dev-cluster-poc.company.domain)或添加 A-record 或在 kubernetes 集群中运行任何 dns 服务。

是什么导致“kubectl get ingress”命令中的 ADDRESS 列为空。

[编辑]

apiVersion: v1
kind: Service
metadata:
  name: appsvc1
  namespace: ingress
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: app1

如下所示的 Nginx 控制器服务。

cat nginx-ingress-controller-service.yaml 
apiVersion: v1
kind: Service
metadata:
  name: nginx-ingress
  namespace: ingress
spec:
  type: NodePort
  ports:
    - port: 80
      nodePort: 30000
      name: http
    - port: 18080
      nodePort: 32000
      name: http-mgmt
  selector:
    app: nginx-ingress-lb

【问题讨论】:

  • 您的集群在哪里运行?答案因云提供商而异
  • @paltaa - 它在 VMware pks 中运行。我可以添加 dns 名称,但想知道需要什么其他配置才能使这项工作从端到端。另外,为什么我的入口没有地址,有什么线索吗?
  • 我认为这取决于您的服务appsvc1appsvc2 定义为哪种serviceType。如果它们被定义为 LoadBalancer 并且您的提供商可以提供额外的 IP 地址,则地址字段应填充该 IP(即每个入口都有一个唯一的 IP)。如果它们被定义为ClusterIPNodePortADDRESS 字段将为空并且将使用 kube 代理 IP。虽然我可能是错的......
  • 正如社区 id 所提到的取决于云提供商的实施,您提到您正在使用 VMware pks,也许应该在集群创建期间配置负载均衡器 Load Balancers in PKS Kubernetes and VMware Enterprise PKS Networking。您可以使用命令kubectl describe ingress .. 从入口资源kubectl get svc 中查看更多信息,输入Loadbalanacer
  • 您的服务需要是 LoadBalancer 或 NodePort 类型,否则,它们无法从集群外部访问,因此无法进行路由。尝试将其更改为 LoadBalancer。

标签: kubernetes kubernetes-ingress nginx-ingress kube-dns


【解决方案1】:

1.你可以部署一个入口部署

2.通过端口 80 公开您的入口部署

kubectl expose deploy your-deployment-name --port 80

source

3.您可以在部署中添加 ingressClassName

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: nginx-ingress
  namespace: ingress
spec:
  ingressClassName: nginx

ingress configuration sample

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-30
    • 1970-01-01
    • 1970-01-01
    • 2016-02-28
    • 1970-01-01
    • 1970-01-01
    • 2017-01-31
    • 1970-01-01
    相关资源
    最近更新 更多