我正在尝试设置 K8s 部署,其中入口的控制器可以将服务定义为子域。即可以定义自己以从其入口配置app1
中获取流量。app1.sub.domain.io
我有一个*.sub.domain.io
指向Load Balancer
. 该负载均衡器指向集群的实例组。
因此,如果我是对的,所有流向 sub.domain.io 的任何流量都将落在集群内,只需要路由所述流量。
下面是 k8 配置,它有一个 pod、一个服务和一个入口。这些 pod 运行良好且正常工作,我相信该服务不是必需的,但会希望其他 pod 通过内部 DNS 与其通信,因此已添加。
ingress 规则有一个 host app1.sub.domain.io
,所以理论上 curl'ing app1.sub.domain.io 应该遵循:DNS -> Load Balancer -> Cluster -> Ingress Controller -> Pod
在我试图击中它的那一刻,app1.sub.domain.io
它只是挂起。我试过没有服务,做外部名称服务并且不起作用。
我不想沿着使用 loadBalancer 入口的路线走下去,因为这会产生一个需要手动应用于 DNS 记录的新外部 IP,或者使用一个讨厌的 bash 脚本来等待服务外部 IP 并运行 GCP 命令,并且我们不想为每项服务都这样做。
参考链接:https ://kubernetes.io/docs/concepts/services-networking/ingress/#name-based-virtual-hosting
部署
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 get pods,services,ingresses -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