当前位置: 首页 > 知识库问答 >
问题:

具有嵌套子域的Kubernetes主机入口(GCP)

梁承恩
2023-03-14

我正在尝试设置K8s部署,ingress的控制器可以将服务定义为子域。i、 e.app1可以定义自身以从app1.sub.domain获取流量。io在其入口配置中。

我有一个DNS a记录。子域。io指向负载平衡器。该负载平衡器指向集群的实例组。

所以,如果我是对的,所有的流量都会转到子域中的任何内容。io将在集群内着陆,只需要路由所述流量。

下面是k8配置,它有一个pod、一个服务和一个入口。这些豆荚是健康和工作的,我相信这项服务是不需要的,但会希望其他豆荚通过内部DNS对话,所以它被添加。

入口规则有一个主机app1.sub.domain。io,所以在理论上,curl'ing app1.sub.domain。io应遵循:DNS-

当我尝试点击app1.sub.domain时。io只是挂起。我试着没有服务,做外部名称服务,但不起作用。

我不想走使用loadBalancer入口的路线,因为这会产生一个新的外部IP,需要手动应用于DNS记录,或者使用一个讨厌的bash脚本等待服务外部IP并运行GCP命令,我们不想为每个服务这样做。

参考链接:https://kubernetes.io/docs/concepts/services-networking/ingress/#name-基于虚拟主机

部署

kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: app1
  namespace: default
  labels:
    app: app1
spec:
  replicas: 3
  selector:
    matchLabels:
      app: app1
  template:
    metadata:
      labels:
        app: app1
    spec:
      containers:
      - image: xxxx:latest
        name: app1
        ports:
        - containerPort: 80
        env:
          - name: NODE_ENV
            value: production

服务

---
kind: Service
apiVersion: v1
metadata:
  name: app1
  labels:
    app: app1
spec:
  ports:
    - port: 80
      targetPort: 80
  selector:
    app: app1
  type: ClusterIP

进入

---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: app1-ingress
  labels:
    app: app1
spec:
  rules:
  - host: app1.sub.domain.io
    http:
      paths:
      - backend:
          serviceName: app1
          servicePort: 80

一旦一切部署完毕,如果您查询kubectl获取pod、服务、入口-l app=app1

NAME                       READY     STATUS    RESTARTS   AGE
po/app1-6d4b9d8c5-4gcz5    1/1       Running   0          20m
po/app1-6d4b9d8c5-m4kwq    1/1       Running   0          20m
po/app1-6d4b9d8c5-rpm9l    1/1       Running   0          20m

NAME        TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
svc/app1    ClusterIP   x.x.x.x         <none>        80/TCP    20m

NAME                HOSTS                   ADDRESS   PORTS     AGE
ing/app1-ingress    app1.sub.domain.io                80        20m

- - - - - - - - - - - - - - - - - - 更新 - - - - - - - ---------------------

目前正在这样做,并不理想。拥有分配给DNS记录的全局静态IP。

---
kind: Service
apiVersion: v1
metadata:
  name: app1
  labels:
    app: app1
spec:
  type: NodePort
  selector:
    app: app1
  ports:
    - port: 80
      targetPort: 80

---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: app1-ingress
  annotations:
    kubernetes.io/ingress.global-static-ip-name: app1-static-ip
  labels:
    app: app1-static-ip
spec:
  backend:
    serviceName: app1
    servicePort: 80

共有2个答案

公羊浩阔
2023-03-14

尝试向入口添加路径:

---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: app1-ingress
  labels:
    app: app1
spec:
  rules:
  - host: app1.sub.domain.io
    http:
      paths:
      - backend:
          serviceName: app1
          servicePort: 80
        path: / 

如果这不起作用,请发布描述服务和描述入口的输出。

你有入口控制器吗?交通应该是LB-

咸高谊
2023-03-14

*.sub.domain.io应该指向入口的IP。

您可以按照此处教程中的说明使用静态IP进行入口:https://cloud.google.com/kubernetes-engine/docs/tutorials/http-balancer#step_5_optional_configuring_a_static_ip_address

 类似资料:
  • 以下是每个部署的潜在工作流: 创建feature-api-deployment.yml 创建feature-api-service.yml 使用新的子域规则更新ingress.yml:指定 但是枚举和维护所有的子域->服务映射将会因为分解部署而变得混乱,并且会创建大量的GCE后端(默认配额是5...)所以不太理想。

  • 我使用的是infra team(不是mini kube)提供的kubernetes集群,我已经创建了带有所有配置的traefik入口控制器,入口容器,我们的应用程序正在集群中运行。现在我想使用域名或IP地址访问应用程序,为此,我创建了一个入口资源,如下所示 这里我没有得到的是主机名,因为应用程序在集群中运行,这个主机名应该是集群主节点名吗?实际prod环境中的主机名或ip地址应该是什么。 注意:我

  • 有人能帮我走台阶吗...(我在互联网的帮助下尝试了多种方法...不知道我错过了什么?) 注意:根据讨论论坛,我在ingress YAML的部署部分中添加了“hostnetwork:true”来解决“没有主机参数不能工作”,并注释了“type:nodeport”。 更新信息: kubectl描述了更新后的入口路由:在这里,我有ngnix--它工作得很好(我猜ingress和nginx都在相同的命名空

  • 我试图将spring boot admin接口添加到kubernetes集群中部署的一些微服务中。spring boot admin应用程序具有以下配置: kubernetes集群有一个入口,用作api网关: 我如何解决这个问题并配置一个传统路径来为来自正确URL的请求中的静态内容提供服务? 提前致谢