我正在尝试设置K8s部署,其中ingress的控制器可以将服务定义为子域。即app1
可以定义自己以在其入口配置中从app1.sub.domain.io
获取流量。
我有一个指向*.sub.domain.io
的DNS A记录Load Balancer
。该负载均衡器指向群集的实例组。
所以如果我说得对,那么所有在sub.domain.io上发生任何事情的流量都将落在集群内部,只需要路由所述流量。
以下是k8配置,它有一个吊舱,一个服务和一个入口。这些播客是健康且有效的,我相信该服务不是必需的,但是会希望其他播客通过内部DNS与之通话,因此它已被添加。
入口规则有一个主机app1.sub.domain.io
,所以从理论上说,curl'ing app1.sub.domain.io应遵循:
DNS - >负载均衡器 - >群集 - >入口控制器 - >荚
当我尝试点击app1.sub.domain.io
时,它就会挂起。我尝试过没有服务,使用外部名称服务但不起作用。
我不想沿着使用loadBalancer入口的路线走下去,因为这会产生需要手动应用于DNS记录的新外部IP,或者使用等待服务外部IP并运行GCP的令人讨厌的bash脚本命令,我们不希望为每个服务执行此操作。
参考链接: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
答案 0 :(得分:0)
尝试添加Ingress的路径:
---
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
path: /
如果这不起作用,请发布describe service的输出并描述ingress。
你有Ingress控制器吗? 流量应该是LB->入口控制器 - &gt; Ingress-&GT; Service ClusterIP-&gt;豆荚
答案 1 :(得分:-1)
* .sub.domain.io应该指向Ingress的IP。
您可以按照本教程中的说明使用Ingress的静态IP:https://cloud.google.com/kubernetes-engine/docs/tutorials/http-balancer#step_5_optional_configuring_a_static_ip_address