Max*_*Max 12 kubernetes terraform minikube
我在本地使用 minikube。以下是.tf我用来创建 kubernetes 集群的文件:
provider "kubernetes" {
config_path = "~/.kube/config"
}
resource "kubernetes_namespace" "tfs" {
metadata {
name = "tfs" # terraform-sandbox
}
}
resource "kubernetes_deployment" "golang_webapp" {
metadata {
name = "golang-webapp"
namespace = "tfs"
labels = {
app = "webapp"
}
}
spec {
replicas = 3
selector {
match_labels = {
app = "webapp"
}
}
template {
metadata {
labels = {
app = "webapp"
}
}
spec {
container {
image = "golang-docker-example"
name = "golang-webapp"
image_pull_policy = "Never" # this is set so that kuberenetes wont try to download the image but use the localy built one
liveness_probe {
http_get {
path = "/"
port = 8080
}
initial_delay_seconds = 15
period_seconds = 15
}
readiness_probe {
http_get {
path = "/"
port = 8080
}
initial_delay_seconds = 3
period_seconds = 3
}
}
}
}
}
}
resource "kubernetes_service" "golang_webapp" {
metadata {
name = "golang-webapp"
namespace = "tfs"
labels = {
app = "webapp_ingress"
}
}
spec {
selector = {
app = kubernetes_deployment.golang_webapp.metadata.0.labels.app
}
port {
port = 8080
target_port = 8080
protocol = "TCP"
}
# type = "ClusterIP"
type = "NodePort"
}
}
resource "kubernetes_ingress" "main_ingress" {
metadata {
name = "main-ingress"
namespace = "tfs"
}
spec {
rule {
http {
path {
backend {
service_name = "golang-webapp"
service_port = 8080
}
path = "/golang-webapp"
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
执行时terraform apply,我成功地创建了除入口之外的所有资源。
错误是:
Error: Failed to create Ingress 'tfs/main-ingress' because: the server could not find the requested resource (post ingresses.extensions)
with kubernetes_ingress.main_ingress,
on main.tf line 86, in resource "kubernetes_ingress" "main_ingress":
86: resource "kubernetes_ingress" "main_ingress" {
Run Code Online (Sandbox Code Playgroud)
当我尝试使用与上面相同的配置(仅在命令中.yaml并使用kubectl apply命令)使用 kubectl 创建入口服务时,它可以工作,因此 kubectl 和 minikube 似乎能够创建这种类型的入口,但 terraform 无法创建某些入口原因...
预先感谢您的任何帮助!
编辑1:
添加.yaml我可以用来创建入口的
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
namespace: tfs
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: golang-webapp
port:
number: 8080
Run Code Online (Sandbox Code Playgroud)
and*_*ied 13
该kubernetes_ingress资源生成一个入口,apiVersion您的 kubernetes 集群不支持该入口。您必须使用[kubernetes_ingress_v1][1]看起来与资源类似kubernetes_ingress但有一些差异的资源。对于您的示例,它将是这样的:
resource "kubernetes_ingress_v1" "jenkins-ingress" {
metadata {
name = "example-ingress"
namespace = "tfs"
annotations = {
"nginx.ingress.kubernetes.io/rewrite-target" = "/$1"
}
}
spec {
rule {
http {
path {
path = "/"
backend {
service {
name = "golang-webapp"
port {
number = 8080
}
}
}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我认为这个问题可能与入口类名有关。可能您需要在 .tf 中明确提供它:
metadata {
name = "example"
annotations = {
"kubernetes.io/ingress.class" = "nginx or your classname"
}
Run Code Online (Sandbox Code Playgroud)
或者可能是您的集群中不存在 ingresses.extensions。你能提供正确执行的.yaml吗?
| 归档时间: |
|
| 查看次数: |
10778 次 |
| 最近记录: |