新加入kubernetes,如何将我的pod暴露给外部流量?

ulydmbyx  于 2023-08-03  发布在  Kubernetes
关注(0)|答案(2)|浏览(112)

我是kubernetes的新手,我有一个带有docker桌面的集群,其中有一个pod,它的后端在容器中,到目前为止,我知道一个服务附加到pod(pod),并提供了一个静态IP,允许外部流量(我想用我的浏览器访问我的后端)。我不知道该怎么做,网上没有什么真的有意义。
我想我需要让我的服务成为负载均衡器类型,以允许静态IP将流量传递到我的Pod中(我只有一个,但当这起作用时,我会升级副本)。
我似乎无法让它工作,以下是相关的配置文件:

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: my-app
  name: my-app
spec:
  selector:
    matchLabels:
      app: my-app
  replicas: 1
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-app
        image: my-app/my-app
        imagePullPolicy: IfNotPresent
        env:
        - name: GET_HOSTS_FROM
          value: dns
        - name: DATABASE_URL
          value: postgres://postgres:postgres@database/postgres
        ports:
        - containerPort: 80

--------------------------------------------

apiVersion: v1
kind: Service
metadata:
  name: my-app
  labels:
    app: my-app
spec:
  ports:
  - port: 80
    targetPort: 8080 
  selector:
    app: my-app

字符串
我最终想把它放在aws或gcp上,但我有点迷失了从这里去哪里,如果有人有任何建议或材料,可以帮助像我这样的聪明人理解这一点,我会真的感谢它。
编辑:我在这里添加了一个入口,我不太确定连接到服务时应该发生什么:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-srv
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/use-regex: "true"
spec:
  ingressClassName: nginx
  rules:
    - host: lesser-bank.com
      http:
        paths:
          - pathType: Prefix
            path: "/test"
            backend:
              service:
                name: lesser-bank-api
                port:
                  number: 8080

qvsjd97n

qvsjd97n1#

默认情况下,服务的类型为ClusterIp,这意味着您的pod只能从集群内访问。
Ingress类型的对象可以提供对服务的外部访问,如下所示:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-srv
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/use-regex: "true"
spec:
  rules:
    - host: acme.com
      http:
        paths:
          - pathType: Prefix
            path: "/myapp"
            backend:
              service:
                name: my-app
                port:
                  number: 80

字符串
这是一个非常常见的问题,可以在Kubernetes文档中轻松找到。

szqfcxe2

szqfcxe22#

如果您只想公开一个部署,那么通过Loadbalancer类型公开您的服务将是理想的。有关详细说明,请参阅此link
但是,如果您想将Nginx Ingress控制器与Let's Encrypt和Cert Manager一起使用,请参阅以下链接以获得详细的解释和说明:
https://github.com/digitalocean/Kubernetes-Starter-Kit-Developers/blob/main/03-setup-ingress-controller/nginx.md

---

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: my-app
  name: my-app
spec:
  selector:
    matchLabels:
      app: my-app
  replicas: 1
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-app
        image: my-app/my-app
        imagePullPolicy: IfNotPresent
        env:
        - name: GET_HOSTS_FROM
          value: dns
        - name: DATABASE_URL
          value: postgres://postgres:postgres@database/postgres
        ports:
        - containerPort: 80
---

apiVersion: v1
kind: Service
metadata:
  name: my-app
  labels:
    app: my-app
spec:
  type: LoadBalancer #add this line to expose your deployment
  ports:
  - port: 80
    targetPort: 8080 
  selector:
    app: my-app

字符串

相关问题