我如何使用我的域名为谷歌kubernetes引擎部署的应用程序?

vqlkdk9b  于 2023-03-01  发布在  Kubernetes
关注(0)|答案(2)|浏览(120)

我是google kubernetes engine的新手。所以我创建了一个新的集群。并在此集群上部署了一个示例应用程序。我可以使用类似30.31.32.33/api的IP地址访问它。所以我想使用我的域名(mydomain.com or subdomain products.mydomain.com)来访问此应用程序
1.我应该将域名服务器设置为ip地址30.31.32.33/api吗?如果重新创建群集,这个ip地址会改变吗?
1.如果我想在不同域的同一集群上发布新应用,我该怎么做?

5f0d552i

5f0d552i1#

为了确保IP不会改变,你需要使用一个静态的IP。有一个关于here的很好的教程。
高级步骤:

  1. Reserve a global static external IP address
gcloud compute addresses create $ADDRESS_NAME \
 --global \
 --ip-version IPV4

1.创建将FQDNMap到该IP地址的DNS A记录
1.在入口中使用kubernetes.io/ingress.global-static-ip-name注解:

apiVersion: networking.k8s.io/v1
 kind: Ingress
 metadata:
   name: myapp
   annotations:
     kubernetes.io/ingress.global-static-ip-name: $ADDRESS_NAME
   labels:
   app: myapp
 spec:
   rules:
   - host: "products.mydomain.com"
     http:
       paths:
         - path: /*
           pathType: ImplementationSpecific
           backend:
             service:
               name: products-service
               port:
               number: 8080

1.如果你想发布更多应用,如果它们位于不同的命名空间中,只需对每个应用重复上述步骤1-3。如果你在同一命名空间中部署所有应用,则可以为每个应用创建额外的DNS A记录,并将它们指向在步骤1中创建的同一IP,然后在上述步骤3中修改入口:

apiVersion: networking.k8s.io/v1
 kind: Ingress
 metadata:
   name: myapp
   annotations:
     kubernetes.io/ingress.global-static-ip-name: $ADDRESS_NAME
   labels:
   app: myapp
 spec:
   rules:
   - host: "products.mydomain.com"
     http:
       paths:
         - path: /*
           pathType: ImplementationSpecific
           backend:
             service:
               name: products-service
               port:
               number: 8080
   - host: "app2.mydomain.com"
     http:
       paths:
         - path: /*
           pathType: ImplementationSpecific
           backend:
             service:
               name: app2-service
               port:
               number: 8080
shstlldc

shstlldc2#

入口示例适用于多个主机

---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-x-host
  annotations:
    kubernetes.io/ingress.class: nginx
spec:
  rules:
  - host: x.example.com
    http:
      paths:
      - pathType: Prefix
        path: /
        backend:
          service:
            name: x
            port:
              number: 80
  - host: y.example.com
    http:
      paths:
      - pathType: Prefix
        path: /
        backend:
          service:
            name: y
            port:
              number: 80

我是否应该将域名服务器设置为ip地址30.31.32.33/api。如果重新创建群集,此ip地址是否会更改?
不确定您是如何获得IP的,如果您正在使用LoadBalancer服务,您可以这样使用它。但将适用于单个服务,或者我可以说是部署。换句话说,如果您有单个应用程序运行,这种方法是可以的。
是的,如果您重新创建服务,我会得到更改,但您也可以使用静态IP
如果我想在具有不同域的同一群集上发布新应用,该怎么做?
您必须使用Kubernetes的入口对象和入口
控制器
来管理多个应用程序并公开所有具有不同主机名的应用程序。
入口将保存有关主机路由的配置,而控制器将管理入口规则。安装控制器后,它将为您提供与创建服务类型相同的IP:LoadBalancer。您可以将此IPMap到任何域/子域的DNS
市场上有许多不同的入口控制器可供选择,具体取决于用途,您可以选择任何广泛使用的Nginx入口控制器,如果需要使用HTTPS以及GCP的**托管SSL
*证书,您也可以选择GCE
您可以参考Nginx入口控制器的示例:https://cloud.google.com/community/tutorials/nginx-ingress-gke
什么是入口,阅读更多信息:https://kubernetes.io/docs/concepts/services-networking/ingress/#what-is-ingress
您也可以在不使用入口控制器的情况下遵循此方法,并获得有关HTTPS证书等的详细信息:https://k8scale-io.medium.com/hosting-multiple-domains-in-gke-ingress-9f8cc61df2ad

相关问题