是否可以通过 ClusterIP 类型的 ingress 来暴露服务?
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: my-service
ports:
- name: my-service-port
port: 4001
targetPort: 4001
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: app-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: my.example.com
http:
paths:
- path: /my-service
backend:
serviceName: my-service
servicePort: 4001
Run Code Online (Sandbox Code Playgroud)
我知道该服务可以通过 NodePort 类型公开,但如果有人可以向我展示从云中的互联网世界检测内部服务的最快方法是什么,它可能会多花费一个 NAT 连接。
运行具有三个 pod 的部署。
NAME READY STATUS RESTARTS AGE
my-api-XXX 3/3 Running 0 4h
Containers:
zipkin:
Container ID: docker://XXX
Image: openzipkin/zipkin:2.11
Image ID: docker-pullable://openzipkin/zipkin@sha256:XXX
Port: 8611/TCP
Host Port: 8611/TCP
State: Running
Started: Mon, 17 Feb 2020 12:13:03 +0800
Ready: True
Restart Count: 0
Environment: <none>
Mounts:
XXX
my-api:
Container ID: docker://XXX
Image: XXX
Image ID: XXX
Ports: 5000/TCP, 6000/TCP
Host Ports: 5000/TCP, 6000/TCP
State: Running
Started: Mon, 17 Feb 2020 12:13:04 +0800
Ready: True
Restart Count: 0
Mounts:
XXX
my-metrics:
Container …Run Code Online (Sandbox Code Playgroud) 我配置的入口与控制器 ingress-nginx 一起运行。
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: app-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
tls:
- hosts:
- XXX.XX.com
secretName: app-tls
rules:
- host: XXX.XX.com
http:
paths:
- path: /my-api(/|$)(.*)
backend:
serviceName: app
servicePort: 80
---
apiVersion: v1
kind: Service
metadata:
name: my-api
spec:
selector:
app: my-api
ports:
- name: app
port: 3000
targetPort: 3000
Run Code Online (Sandbox Code Playgroud)
我可以在本地运行 api curl localIP:3000/testapi,但它不能远程运行。
# kubectl describe ingress app-ingress
Name: app-ingress
Namespace: default
Address: XX.XX.XX.XX
Default backend: default-http-backend:80 (<error: endpoints "default-http-backend" not found>)
TLS: …Run Code Online (Sandbox Code Playgroud) 我有一个完整的recyclerView示例,现在我想使用hilt将此示例的ItemListAdapter注入到我的ItemListFragment中。但如果我还想要剑柄之道,似乎是做不到的。
class ItemListFragment : Fragment() {
private val viewModel: ItemListViewModel by viewModels()
private var adapter: ItemListAdapter? = null
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val binding = FragmentItemListBinding.inflate(inflater)
binding.lifecycleOwner = this
binding.viewModel = viewModel
adapter =
ItemListAdapter(
ItemListOnClickListener { itemId ->
viewModel.onItemClicked(itemId)
})
binding.itemList.adapter = adapter
return binding.root
}
}
class ItemListAdapter(private val onClickListener: ItemListOnClickListener):
ListAdapter<Item, ItemListAdapter.ViewHolder>(
ItemListDiffCallback()
) {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
return ViewHolder(
ListItemBinding.inflate(LayoutInflater.from(parent.context))
)
}
override …Run Code Online (Sandbox Code Playgroud) 当我在工作节点中重新启动 docker 服务时,主节点中的 kubelet 日志报告 no such file 错误。
# in work node
# systemctl restart docker service
# in master node
# journalctl -u kubelet
# failed to load Kubelet config file /var/lib/kubelet/config.yaml, error failed to read kubelet config file "/var/lib/kubelet/config.yaml", error: open /var/lib/kubelet/config.yaml: no such file or directory
Run Code Online (Sandbox Code Playgroud) 当我耗尽并删除集群中现有的工作节点时,如果我想将其重新加入主节点,它会报告下面的错误。
error execution phase preflight: [preflight] Some fatal errors occurred:
[ERROR FileAvailable--etc-kubernetes-kubelet.conf]: /etc/kubernetes/kubelet.conf already exists
[ERROR FileAvailable--etc-kubernetes-pki-ca.crt]: /etc/kubernetes/pki/ca.crt already exists
Run Code Online (Sandbox Code Playgroud) 我试图模拟数据库来测试我的本地 api,我在官方文档中搜索找到可以很好地与远程 api 一起使用的 mockito,但也不能与本地数据库开箱即用,有什么办法可以解决它吗?
当我使用标志包
// main.go
import (
...
"flag"
)
func main() {
...
flag.Parse()
switch flag.Arg(0) {
case "doSomething1":
...
case "doSomething2":
...
}
}
Run Code Online (Sandbox Code Playgroud)
如果doSomething1参数为我打印了一些错误消息,无论我如何修复源代码,它都无法删除旧的错误代码并重新编译。
// command-line
# go build ./main.go
# ./main doSomething1
# error doSomething1 can not work
-- I fix my code
# ./main doSomething1
# error doSomething1 can not work
-- the error message also show me again
-- I have to delete main and build again
# rm ./main
# go build ./main.go
# ./main.go …Run Code Online (Sandbox Code Playgroud) 我在范围循环中看到这一点以获取 MIME 标头。
for _, ext := range parseExtensions(r.Header) {
if ext[""] != "permessage-deflate" {
continue
}
compress = true
break
}
Run Code Online (Sandbox Code Playgroud)