Kubernetes 如何使用Terraform在K8S群集计算机上创建入口?

Kubernetes 如何使用Terraform在K8S群集计算机上创建入口?,kubernetes,terraform,kubernetes-ingress,Kubernetes,Terraform,Kubernetes Ingress,我是K8S和Terraform的新手。我在运行在裸机上的K8S集群上安装了ingress_nginx [root@control02 ~]# kubectl get svc -n ingress-nginx NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE docker-hello-world-svc

我是K8S和Terraform的新手。我在运行在裸机上的K8S集群上安装了ingress_nginx

[root@control02 ~]# kubectl get svc -n ingress-nginx
    NAME                                 TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
    docker-hello-world-svc               NodePort    10.xx.xx.121     <none>        8086:30333/TCP               13d
    ingress-nginx-controller             NodePort    10.xx.xx.124     <none>        80:31545/TCP,443:30198/TCP   13d
    ingress-nginx-controller-admission   ClusterIP   10.xx.xx.85      <none>        443/TCP                      13d
我的要求是在K8S集群上封装我们基于PHP的应用程序

  • 通过Terraform的资源“kubernetes_ingress”“web”和
    ingress创建入口。yaml:kubernetes.io/ingress.class
    相同(或不同)吗

  • 如何使用Terraform在K8S群集计算机上创建“入口”

    例如,当我从GitLab触发一个作业时,Terraform应该在K8S集群或控制平面机器上创建一个新的
    “resource kubernetes_ingress”
    。这可能吗


  • 请澄清上述问题,并让我知道我的理解是否错误

    需要使用
    ingress.class
    让nginx ingress控制器了解他需要处理此资源

    要使用terraform创建入口,可以使用以下方法

    resource "kubernetes_ingress" "ingress" {
      metadata {
        name      = "ingress-name"
        namespace = "ingress-namespace"
        labels = {
          app = "some-label-app"
        }
        annotations = {
          "kubernetes.io/ingress.class" : "nginx"
        }
      }
    
      spec {
        rule {
          host = "foo.com"
          http {
            path {
              backend {
                service_name = "svc"
                service_port = "http"
              }
            }
          }
        }
      }
    }
    

    需要使用
    ingres.class
    让nginx入口控制器了解他需要处理此资源

    要使用terraform创建入口,可以使用以下方法

    resource "kubernetes_ingress" "ingress" {
      metadata {
        name      = "ingress-name"
        namespace = "ingress-namespace"
        labels = {
          app = "some-label-app"
        }
        annotations = {
          "kubernetes.io/ingress.class" : "nginx"
        }
      }
    
      spec {
        rule {
          host = "foo.com"
          http {
            path {
              backend {
                service_name = "svc"
                service_port = "http"
              }
            }
          }
        }
      }
    }
    

    我能够使用以下代码在现有K8S集群(裸机)上创建服务

    K8S集群是在
    192.168.xxx.xxx
    上安装的,我在其上创建了一个服务
    示例
    。我们需要提到
    'kubernetes'
    块中的
    'host'
    参数

    provider "kubernetes" {
        **host = "https://192.168.xxx.xxx:6443"**
        cluster_ca_certificate = "${base64decode(var.cluster_ca_certificate)}"
        client_certificate = "${base64decode(var.client_certificate)}"
        client_key = "${base64decode(var.client_key)}"
    }
      
      resource "kubernetes_service" "example" {
        metadata {
          name = "example"
        }
        spec {
          port {
            port = 8585
            target_port = 80
          }
          type = "ClusterIP"
        }
    }
    

    我能够使用以下代码在现有K8S集群(裸机)上创建服务

    K8S集群是在
    192.168.xxx.xxx
    上安装的,我在其上创建了一个服务
    示例
    。我们需要提到
    'kubernetes'
    块中的
    'host'
    参数

    provider "kubernetes" {
        **host = "https://192.168.xxx.xxx:6443"**
        cluster_ca_certificate = "${base64decode(var.cluster_ca_certificate)}"
        client_certificate = "${base64decode(var.client_certificate)}"
        client_key = "${base64decode(var.client_key)}"
    }
      
      resource "kubernetes_service" "example" {
        metadata {
          name = "example"
        }
        spec {
          port {
            port = 8585
            target_port = 80
          }
          type = "ClusterIP"
        }
    }
    

    谢谢你的回答。请回答我的问题#2请不要犹豫,澄清第一个问题,我可能没有理解你的回答。请回答我的问题#2请不要犹豫,澄清第一个问题,我可能不明白